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

来源:互联网 发布:网络技术开发合同 编辑:程序博客网 时间:2024/04/30 21:29

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


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

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


UserAction.java中的代码如下:

package com.wh.action;import com.opensymphony.xwork2.ActionSupport;public class UserAction extendsActionSupport{private static final long serialVersionUID = 1L;private String name;private String password;private String description;private int sex;private String province;private String[] hobby;public String getName(){return name;}public void setName(String name){this.name = name;}public String getPassword(){return password;}public void setPassword(String password){this.password = password;}public String getDescription(){return description;}public void setDescription(String description){this.description = description;}public int getSex(){return sex;}public void setSex(int sex){this.sex = sex;}public String getProvince(){return province;}public void setProvince(String province){this.province = province;}public String[] getHobby(){return hobby;}public void setHobby(String[] hobby){this.hobby = hobby;}public String execute() throws Exception{return "success";}}


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

<package name="myPackage" extends="struts-default"><!-- 定义action --><action name="userAction" class="com.wh.action.UserAction"><result name="success">success.jsp</result><result name="error">error.jsp</result></action></package>

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

<div><h2>用户注册信息</h2><ul><li>用户名:<s:property value="name" /></li><li>密  码:<s:property value="password" /></li><li>性  别:<s:if test="sex==0">女</s:if><s:else>男</s:else></li><li>省  份:<s:property value="province" /></li><li>爱  好:<s:property value="hobby" /></li><li>描  述:<s:property value="description" /></li></ul></div>

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


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

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

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

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

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




0 0
原创粉丝点击