日期:2014-05-20  浏览次数:20987 次

请解释一下预装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")