学习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>
我在做一个很简单的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>
应该使用html:form来使用这个form
attribute="loginForm"
input="/login.jsp"
name="loginForm"
path="/login"
scope="session"
type="com.fhj.struts.action.LoginAction"> 一般都是request
我想问的是,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的值)
各位帮忙解答下!!
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) 有值的是这里面的这个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>
我好像有点明白了,可还是有些不明白
<jsp:useBean id="LoginForm" type="..." scope="session"/>
我想问的是上面的代码是要先从session中找名为LoginForm的formBean,确能找到就不新产生新实例了???
这句话是新生成一个LoginForm的实例,
主要用在 在jsp页面处理流程。而你在action里的formBean是struts里的东西。你并没有把action里的formBean传到jsp页面上去。另外,如果刚开始学的话,而且只是单纯的学的话,可以看看Struts2了。