最近照着书上的例子写了个小程序,通过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>
package com.wh.action;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport{
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";
}
}
<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后,程序就可以得到正常的结果了。
遗憾的是经过一番百度之后我没有找到关于此属性的解释,在官网也没有找到相关的信息。可能是我找的不够仔细,希望看到这篇博客的朋友如果有所了解的话能留下您的评论,万分感激。