Struts2框架中action无法获取到jsp页面传递的表单数据的解决办法

最近照着书上的例子写了个小程序,通过Struts2提供的表单标签编写用户注册表单,并将注册信息输出到另一个jsp页面中。但是却一直出错,表单中的属性无法传递到action中的属性中,从action传递到结果页面的数据全部是空的。


下面是index.jsp中的关键代码:

  1. <h2>用户注册</h2>
  2. <s:form action="userAction" method="post">
  3. <s:textfield name="name" label="用户名" required="true" requiredposition="left"></s:textfield>
  4. <s:password name="password" label="密码" required="true" requiredposition="left"></s:password>
  5. <s:radio name="sex" list="#{1:'男',0:'女' }" label="性别" required="true" requiredposition="left"></s:radio>
  6. <s:select list="{'请选择省份','吉林','山东','广东','河南'}" name="province" label="省份"></s:select>
  7. <s:checkboxlist list="{'足球','羽毛球','乒乓球','篮球'}" name="hobby" label="爱好"></s:checkboxlist>
  8. <s:textarea name="description" cols="30" rows="5" label="描述"></s:textarea>
  9. <s:submit value="注册"></s:submit>
  10. <s:reset value="重置"></s:reset>
  11. </s:form>


UserAction.java中的代码如下:

  1. package com.wh.action;
  2. import com.opensymphony.xwork2.ActionSupport;
  3. public class UserAction extends ActionSupport{
  4. private static final long serialVersionUID = 1L;
  5. private String name;
  6. private String password;
  7. private String description;
  8. private int sex;
  9. private String province;
  10. private String[] hobby;
  11. public String getName(){
  12. return name;
  13. }
  14. public void setName(String name){
  15. this.name = name;
  16. }
  17. public String getPassword(){
  18. return password;
  19. }
  20. public void setPassword(String password){
  21. this.password = password;
  22. }
  23. public String getDescription(){
  24. return description;
  25. }
  26. public void setDescription(String description){
  27. this.description = description;
  28. }
  29. public int getSex(){
  30. return sex;
  31. }
  32. public void setSex(int sex){
  33. this.sex = sex;
  34. }
  35. public String getProvince(){
  36. return province;
  37. }
  38. public void setProvince(String province){
  39. this.province = province;
  40. }
  41. public String[] getHobby(){
  42. return hobby;
  43. }
  44. public void setHobby(String[] hobby){
  45. this.hobby = hobby;
  46. }
  47. public String execute() throws Exception{
  48. return "success";
  49. }
  50. }


struts.xml文件关键部分如下:

  1. <package name="myPackage" extends="struts-default">
  2. <!-- 定义action -->
  3. <action name="userAction" class="com.wh.action.UserAction">
  4. <result name="success">success.jsp</result>
  5. <result name="error">error.jsp</result>
  6. </action>
  7. </package>

结果输出页面success.jsp页面关键部分如下:

  1. <div>
  2. <h2>用户注册信息</h2>
  3. <ul>
  4. <li>用户名:<s:property value="name" /></li>
  5. <li>密  码:<s:property value="password" /></li>
  6. <li>性  别:<s:if test="sex==0"></s:if><s:else></s:else></li>
  7. <li>省  份:<s:property value="province" /></li>
  8. <li>爱  好:<s:property value="hobby" /></li>
  9. <li>描  述:<s:property value="description" /></li>
  10. </ul>
  11. </div>

以上是程序的主体部分,经过一遍遍的检查,确认没有任何错误。为了找到解决办法,还特意在action中使用了request来获取、声明各种属性值,结果仍然不尽人意。


纠结了好久之后想到,会不会是web.xml里面的问题呢?于是把自己的配置文件和例子中给的web.xml比对了一下,果然发现了不同。

下面是我的web.xml文件的文件头和例程的web.xml的文件头的比对:

  1. <web-app version="2.5" xmlns:javaee="http://java.sun.com/xml/ns/javaee"
  2. xmlns:xml="http://www.w3.org/XML/1998/namespace"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd ">
  1. <pre name="code" class="xml"><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
  3. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
  4. id="WebApp_ID" version="2.5">

经过对比发现,我的web.xml文件中少了个xmlns:web的属性,且xmlns:javaee属性在例程中对应的是xmlns。那么究竟是哪错了呢?

非常幸运在第一次的尝试中就找到了关键。在把xmlns:javaee改成xmlns后,程序就可以得到正常的结果了。
遗憾的是经过一番百度之后我没有找到关于此属性的解释,在官网也没有找到相关的信息。可能是我找的不够仔细,希望看到这篇博客的朋友如果有所了解的话能留下您的评论,万分感激。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值