学习struts 中遇到一个问题,高手来帮忙解决下(小弟不胜感激,想了几天了)
我在做一个很简单的struts登陆的程序,有这样几下文件:
LoginForm.java 我的 formBean
LoginAction.java action
Admin.jsp show 显示页面
Login.jsp input 提交面面
<title>JSP for LoginForm form</title>
</head>
<body>
login system.... welcome!
<html:form action="/login">
name : <html:text property="name"/><br/>
<html:submit/><html:cancel/>
</html:form>目标是想提交内容后,action不作任何处理后,在amdin.jsp中显示出来程序运行没有问题,不过有几个问题不明白:如下:
Struts-config.xml文件内容如下:
...
<form-beans >
    <form-bean name="loginForm" type="com.fhj.struts.form.LoginForm"/>
  </form-beans>
  <action-mappings >
    <action
      attribute="loginForm"
      input="/login.jsp"
      name="loginForm"
      path="/login"
      scope="session"
      type="com.fhj.struts.action.LoginAction">
      <forward
        name="show"
        path="/Admin.jsp"
        redirect="true" />
</action>
…….
LoginAction:
public class LoginAction extends Action {
/*
 * Generated Methods
 */ /** 
 * Method execute
 * @param mapping
 * @param form
 * @param request
 * @param response
 * @return ActionForward
 */
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
LoginForm loginform = (LoginForm) form;// TODO Auto-generated method stub
     /*
     很不明白的地方?
     *如果我在这里写这样的代码:
     * loginForm www = (LoginForm) form;
     * 然后将后面的admin.jsp中 改成如下:
     <jsp:useBean id="www" class="com.fhj.struts.form.LoginForm"
\\
…   name:<jsp:getProperty  name="www" property="name"/><br/>
\\ 为什么结果就变成name:null?
    我是这样想的:实例formbean(loginForm)后转到admin.jsp 从当面的session中取出LoginForm 没有问题吧??
*/
return mapping.findForward("show");
}
}admin.jsp 文件如下:
<html>
  <head>
<jsp:useBean id="loginForm" class="com.fhj.struts.form.LoginForm" scope="session"/>-这里不太明白了:为什么我将这里改session为request,并将xml中的action内的session也改成“request”后,提交后,结果:name:null(为什么?)
  </head>
  
  <body>
name:<jsp:getProperty  name="loginForm" property="name"/><br/>
  </body>
</html>

解决方案 »

  1.   

    <jsp:useBean id="loginForm" class="com.fhj.struts.form.LoginForm" scope="session"/>这个是new一个对象吧?
    应该使用html:form来使用这个form
      

  2.   

    <action 
          attribute="loginForm" 
          input="/login.jsp" 
          name="loginForm" 
          path="/login" 
          scope="session" 
          type="com.fhj.struts.action.LoginAction"> 一般都是request
      

  3.   

    先谢谢上面位的答疑!!!
    我想问的是,action中不是有产生formBean对象的吗?LoginForm loginform = (LoginForm) form
    我换成这样 loginFom www =(LoginForm)form
    然后 在其成功跳转页admin.jsp 中再<jsp:useBean id="www" class="com.fhj.struts.form.LoginForm" scope="session"/> 
    再用name:<jsp:getProperty name="www" property="name"/>
    为什么取不到值了(我在submit时给name的值)
    各位帮忙解答下!!
      

  4.   

    这个应该是new对象,formBean是STRUTS的东西,而你这样用的话你就把它当成了一个POJO,与STRUTS无关了,
    public ActionForward execute(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response) 有值的是这里面的这个form
      

  5.   

    如果你一定要那样的话,或许可以这样写,不过我没试过,只是觉得理论上可行(好象这样FORM要实现Serializable):public ActionForward execute(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response) {
    LoginForm loginForm = (LoginForm) form;
    request.getSession().setAttribute("loginForm",loginForm);
    return mapping.findForward("show");
    } admin.jsp 文件如下:
    <html>
      <head>
      </head>
     
      <body>
    name: ${loginForm.name} <br/>
      </body>
    </html> 
      

  6.   


    我好像有点明白了,可还是有些不明白
    <jsp:useBean id="LoginForm" type="..." scope="session"/>
    我想问的是上面的代码是要先从session中找名为LoginForm的formBean,确能找到就不新产生新实例了???
      

  7.   

    <jsp:useBean id="loginForm" class="com.fhj.struts.form.LoginForm" scope="session"/>
    这句话是新生成一个LoginForm的实例,
    主要用在 在jsp页面处理流程。而你在action里的formBean是struts里的东西。你并没有把action里的formBean传到jsp页面上去。另外,如果刚开始学的话,而且只是单纯的学的话,可以看看Struts2了。