问题描述
小弟最近学习struts ,做了一个用户登录的小练习,但是输入用户名和密码后,获取不到输入的数据。首先在struts.xml中配置: <action name="index"> <result > /Loginform.jsp </result> </action> <action name="LoginAction" class="org.action.LoginAction" method="excute"> <result name="success" > /success.jsp </result></action> 主界面jsp页面:<p><h1>用户登录</h1></p> <form name="Login" action="LoginAction" method="post"> 用户名:<input type="text" name="username"/><br> 密码:<input type="password" name="password"/><br> <tr colspan="2"> <td><input type="submit" value="登录"/></td> <td><input type="reset" value="取消"/></td> </tr> </form> 创建一个USER类 ,包含了username和password :public class USER { private String username; private String password; public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public USER(){//setUsername(getUsername());//setPassword(getPassword());}public String toString(){ return getUsername()+getPassword();}} action java文件:import com.opensymphony.xwork2.ActionSupport;public class LoginAction extends ActionSupport{/** * */private static final long serialVersionUID = 1L;private USER User;public USER getUser() {return User;}public void setUser(USER user) {User = user;}public String excute() throws Exception{User=new USER();//User.username="www";//User.password="dede";return "success";}} 最后跳到显示信息的jsp页面success.jsp:只是显示我输入的数据<s:property value="User" />
解决方案
页面form改为 用户名:<input type="text" name="User.username"/><br> 密码:<input type="password" name="User.password"/><br>public String excute() throws Exception{ System.out.println(User.getUsername()); //User.username="www"; //User.password="dede"; return "success"; }
解决方案二:
视图form里面name分别用user.username、user.password 不然前台数据无法传递到值栈中对应的user里面
解决方案三:
根据楼上的回答,我提示下用户名:<input type="text" name="User.username"/><br> 密码:<input type="password" name="User.password"/><br> 估计是User取名字的问题,在set的时候第一个字母会自动转为小写,要不你试试用户名:<input type="text" name="user.username"/><br> 密码:<input type="password" name="user.password"/><br>
解决方案四:
在loginForm 的execute 改成如下public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)throws Exception { String usreName = request.getParameter("username"); String password = request.getParameter("password"); }strut1 中无法在action中用get set 设置属性 或者获取属性值,可以通过配置一个UserForm 来处理添加一个form 并设置属性public class UserForm extends ActionForm{ private String userName ; private String password ; public void set(String userName) { this.userName = userName ; } public String getUserName() { return this.userName ; } public void setPassword(String password) { this.password = password ; } public String getPassword() { return this.password ; }}在struts.xml 中添加<form-beans> <form-bean name="userForm" type="form.UserForm"></form-bean></form-beans><action-mappings><action path="/loginAction" name="LoginAction" class="org.action.LoginAction" method="excute"></action></action-mappings>public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)throws Exception { UserForm uf = form ; }
解决方案五:
把上面两楼说的都jsp和action代码都修改了就可以了
解决方案六:
引用import com.opensymphony.xwork2.ActionSupport;public class LoginAction extends ActionSupport{/** * */private static final long serialVersionUID = 1L;private USER User;public USER getUser() {return User;}public void setUser(USER user) {User = user;}public String excute() throws Exception{[color=red]//User=new USER();//这里改为User = this.getUser(); System.out.println(user.getUserName());[/color] //编码请遵循 驼峰模式 userName ,not UserName;//User.username="www";//User.password="dede";return "success";}}