日期:2014-05-18  浏览次数:20759 次

Struts Action使用的几个问题
最近做Action时碰到几个棘手的问题,请教一下大家了
1、如何在Action中读取web.xml的参数   Google过一些答案   但大多是Servlet下使用的   再Sruts   Action中获取不到,谢过了
2、正常情况下在Action中
LoginForm   loginForm   =   (LoginForm)   form;
loginForm.setUser( "admin ");
return   mapping.findForward( "login ");
在页面中如果使用
<html:form   Action= "login) "> <!--对应LoginForm-->
<html:text   property= "user ">
</html:form>
则运行时刻会自动将admin填充到对应的Text中
但如果该页面是由另外一个Action转过来的如
TestForm   testForm   =   (TestForm   )   form;
return   mapping.findForward( "login ");
那么在这个Action中如何对JSP页面上的那个Form赋值呢   谢谢!!

------解决方案--------------------
public ActionForward execute(ActionMapping mapping, ActionForm form,
ServletRequest request, ServletResponse response)
throws Exception {
try {
ServletContext application = request.getSession().getServletContex(); //得到application对象

return execute(mapping, form, (HttpServletRequest) request,
(HttpServletResponse) response);
} catch (ClassCastException e) {
return null;
}
}

request.getSession().getServletContext(); 得到application对象了
------解决方案--------------------
1,好像Action里直接有getServletContext()方法的吧。
2,第一个自所以会自动匹配是因为,在struts-config.xml中,LoginAction和LoginForm关联了,
所以struts框架会直接给表单LoginForm赋值。你的TestForm没有和LoginAction关联自然也就不能
自动赋值。比较挫的办法是从request中获得form,判断是LoginForm还是TestForm,然后强制转换成TestForm,然后在手动给 <html:text property= "user " value= " <%=username%> "> 赋值
你用一个页面对应了两个表单,这在设计上本来就不合理,应该可以通过其他办法满足需求的。
------解决方案--------------------
对于第二个问题,假如你在struts-config.xml中配置的form名是TestForm,而且scope=request,那么,在TestForm testForm = (TestForm ) form;之后,执行request.setAttribute( "TestForm ", form);之后,转到页面上也能自动填充了。