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