请解释一下预装form的详细原理
在struts开发的web项目中,假设这样一种常见的情况
检索结果画面,每页显示10条用户明细数据,每一条记录的用户ID是超链接,点击用户ID的超链接,转向该用户详细信息的编辑画面useredit.jsp
那么,需要做的工作就是
1:ActionServlet截获请求,寻找处理该请求的Action,这里假定Action是PrepareUserInfoAction
2:PrepareUserInfoAction获取请求的用户ID参数,并依据userID去执行DB查询,返回该userID的相关详细信息
3:生成useredit.jsp画面对应的ActionForm(假的是UserInfoForm)实例,并用2中从DB获取的数据进行填充,ActionForward转向useredit.jsp将预装好的信息呈现给用户
假定struts-config.xml文件里如下配置
<form-bean name="userInfoForm" type="com.andy.app.form.UserInfoForm"/>
<action path="/useredit"
type="com.andy.app.action.PrepareUserInfoAction"
name="userInfoForm"
.......
<forward name="success" path="/jsp/useredit.jsp"/>
</action>
假定com.andy.app.action.PrepareUserInfoAction内容如下:
public final class PrepareUserInfoAction extends Action {
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
ActionForward actionForward = new ActionForward(mapping.getInput());
ActionErrors errors = new ActionErrors();
UserInfoForm userInfoForm = (UserInfoForm) form;
......
//查询DB,获取数据,填充userInfoForm
......
-----------------------------------
这里该做些什么?//add your code here
-----------------------------------
if(errors.size() == 0){
actionForward = mapping.findForward(Constants.SUCCESS);
}
saveErrors(request, errors);
return actionForward;
}
}
我的问题是:第3步中,useredit.jsp画面的ActionForm被填充之后,这个ActionForm实例被存放在了哪里?它又是如何被useredit.jsp获取并显示的?
请详细描述这个过程,谢谢!!!
[解决办法]
这个ActionForm会被Struts默认的存放到request的Attribute里面
Jsp里面的Struts标签就默认的调用request.getAttribute()方法获取对应的参数的值
[解决办法]
放到request里,request.setAttribute("userInfoForm ",userInfoForm );
转发后的jsp页面获取用request.getAttribute("userInfoForm")