同一个form提交的数据为什么只能取到其中一个字段的值?
代码如下:
页面:
<%@ page pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<div class="page">
<div class="pageContent">
<form method="post" action="deliveryman/add.action" class="pageForm required-validate" onsubmit="return validateCallback(this, navTabAjaxDone);">
<div class="pageFormContent" layoutH="56">
<p>
<label>配送员ID:</label>
<input name="delivery.deliverymanid" type="hidden" size="30" value="${delivery.deliverymanid}"/>
</p>
<p>
<label>配送员名称/登录名称:</label>
<!--  <input name="delivery.deliverymanname" class="required" type="text" size="30" value="${delivery.deliverymanname}"/>-->
<textarea rows="1" cols="30" name="delivery.deliverymanname">${delivery.deliverymanname}</textarea>
</p>
<p>
<label>密码:</label>
<input name="delivery.password" class="required" type="text" size="30" value="${delivery.password}" alt="请客户密码"/>
</p>
<p>
<label>所属配送点:</label>
<select class="required" name="delivery.distributionid">
<c:forEach items="${app_distributions}" var="dis"><option value="${dis.distributionid}">${dis.distributionname}</option></c:forEach>
</select>
<!-- <input name="delivery.distributionid" class="required" type="text" size="30" value="${delivery.distributionid}" alt="请选择配送点"/> -->
</p>
<p>
<label>领导:</label>
<input name="delivery.managerid" class="required" type="text" size="30" value="${delivery.managerid}" alt="请输入客户名称"/>
</p>
<p>
<label>备注:</label>
<textarea rows="5" cols="30" name="delivery.re">${delivery.managerid}</textarea>
</p>
</div>
<div class="formBar">
<ul>
<!--<li><a class="buttonActive" href="javascript:void(0)"><span>保存</span></a></li>-->
<li><div class="buttonActive"><div class="buttonContent"><button type="submit">保存</button></div></div></li>
<li>
<div class="button"><div class="buttonContent"><button type="Button" onclick="navTab.closeCurrentTab()">取消</button></div></div>
</li>
</ul>
</div>
</form>
</div>
</div>struts.xml
<package name="basePackage" extends="struts-default">
<interceptors>
<interceptor-stack name="baseStack">
<interceptor-ref name="exception" />
<interceptor-ref name="alias" />
<interceptor-ref name="servletConfig" />
<interceptor-ref name="i18n" />
<interceptor-ref name="prepare" />
<interceptor-ref name="chain" />
<interceptor-ref name="debugging" />
<interceptor-ref name="scopedModelDriven" />
<interceptor-ref name="modelDriven" />
<interceptor-ref name="fileUpload" />
<interceptor-ref name="checkbox" />
<interceptor-ref name="multiselect" />
<interceptor-ref name="staticParams" />
<interceptor-ref name="actionMappingParams" />
<interceptor-ref name="params">
<param name="excludeParams">dojo\..*,^struts\..*</param>
</interceptor-ref>
<interceptor-ref name="conversionError" />
<!-- 配置方法级别的校验 -->
<!--  -->
<interceptor-ref name="validation">
<param name="excludeMethods">input,back,cancel,browse</param>
<param name="validateAnnotatedMethodOnly">true</param>
</interceptor-ref>
<interceptor-ref name="workflow">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
</interceptor-stack>
</interceptors> <!-- 配置默认拦截器栈 -->
<default-interceptor-ref name="baseStack" /> <!--
未到找Action指向页面 <default-action-ref name="errorPage" /> <action
name="errorPage"> <result type="redirect">/page/error.jsp</result>
</action>
-->
</package><package name="deliveryman" extends="basePackage" namespace="/deliveryman">
<!--
配置默认拦截器栈 
-->
<default-interceptor-ref name="baseStack" /> <action name="to_add_ui">
<result>/WEB-INF/jsp/deliveryman/add.jsp</result>
</action>
<action name="add"
class="com.doximi.logistics.actions.DeliverymanAction"
method="add">
<result name="error">/page/error.jsp</result>
<result name="success">/page/success.jsp</result>
</action>
</package>
DeliverymanAction.javapublic class DeliverymanAction extends ActionSupport{
/**
 * 
 */
private static final long serialVersionUID = 1L;
private static final Logger log = Logger.getLogger(DeliverymanAction.class);
private DeliverymanService ds = new DeliverymanService();
private DeliverymanEntity delivery; public String add() {
log.debug(delivery.toString());
return "error";
} public void setDelivery(DeliverymanEntity deliveryman) {
this.delivery = deliveryman;
}
}
实体类部分代码:@Entity
@Table(name = "deliveryman_tab")
public class DeliverymanEntity extends java.lang.Object implements
java.io.Serializable { // Fields /**
 * 
 */
private static final long serialVersionUID = 1L;
private Integer deliverymanid;
private String deliverymanname;
private String password;
private String distributionid;
private Integer managerid;
private String re;
@Column(name = "managerid", nullable = false)
public Integer getManagerid() {
return this.managerid;
} public void setManagerid(Integer managerid) {
this.managerid = managerid;
} @Column(name = "re")
public String getRe() {
return this.re;
}
唯一有点不同的就是, nullable = false
运行结果:2010-12-30 15:46:16 [com.doximi.logistics.actions.DeliverymanAction]-[DEBUG] DeliverymanEntity [deliverymanid=null, deliverymanname=null, distributionid=null, managerid=null, password=null, re=testssss]页面上都是输入了值的,但不论怎么弄就只re取得到值尝试过如下几种方法都不行,把text改成textarea
把字段的位置改变,既把 配送员名称/登录名称: 换到最后一行
把 配送员名称/登录名称: 这一行改成textarea,换到最后一行以上几种变化都只能取到re的值,为什么会出现这种状况?大家帮忙看看吧...

解决方案 »

  1.   

     private static final long serialVersionUID = 1L;
        private Integer deliverymanid;
        private String deliverymanname;
        private String password;
        private String distributionid;
        private Integer managerid;
        private String re;
        @Column(name = "managerid", nullable = false)
        public Integer getManagerid() {
            return this.managerid;
        }    public void setManagerid(Integer managerid) {
            this.managerid = managerid;
        }    @Column(name = "re")
        public String getRe() {
            return this.re;
        }
    只有re有get方法getRe()
    其它的都加上相关方法
      

  2.   

    public class DeliverymanEntity extends java.lang.Object implements
            java.io.Serializable {    // Fields    /**
         * 
         */
        private static final long serialVersionUID = 1L;
        private Integer deliverymanid;
        private String deliverymanname;
        private String password;
        private String distributionid;
        private Integer managerid;
        private String re;
    public Integer getDeliverymanid() {
    return deliverymanid;
    }
    public void setDeliverymanid(Integer deliverymanid) {
    this.deliverymanid = deliverymanid;
    }
    public String getDeliverymanname() {
    return deliverymanname;
    }
    public void setDeliverymanname(String deliverymanname) {
    this.deliverymanname = deliverymanname;
    }
    public String getPassword() {
    return password;
    }
    public void setPassword(String password) {
    this.password = password;
    }
    public String getDistributionid() {
    return distributionid;
    }
    public void setDistributionid(String distributionid) {
    this.distributionid = distributionid;
    }
    public Integer getManagerid() {
    return managerid;
    }
    public void setManagerid(Integer managerid) {
    this.managerid = managerid;
    }
    public String getRe() {
    return re;
    }
    public void setRe(String re) {
    this.re = re;
    }}
    这样就好了
      

  3.   

    是啊  你都有对应的get set方法么?
      

  4.   

    给所有的字段都加上 set 和get方法 
      

  5.   

    谢谢你的帮助
    实体类没贴完
    实体类的每一个字段都有getter/setter的
      

  6.   

    public void setDelivery(DeliverymanEntity deliveryman) {
    this.delivery = deliveryman;
    }
    这个类的get方法没有呢
      

  7.   

    这个不需要get方法吧
    页面的re就取到了啊就其他的出不来 
      

  8.   

    你把deliveryman加个getter方法。
      

  9.   

    谢谢大家
    问题已解决确实是在DeliverymanAction中的属性delivery加了getDelivery属性        public DeliverymanEntity getDelivery(){
    return this.delivery;
    }
    public void setDelivery(DeliverymanEntity deliveryman) {
    this.delivery = deliveryman;
    }不太明白原理。
    有没有人能解释下?
      

  10.   

    struts2使用Action来封装HTTP的请求参数,所以Ation类里需要包含请求参数对应的属性,并且需要为该属性提供对应的setter and getter方法(P.S:你也可以不对类进行set get,直接对它的属性set get亦可)。然后由struts2的拦截器负责解析HttpServletRequest的请求参数,并将请求参数赋值给Action对应的属性。建议多看看struts2的拦截器,这是struts2的核心。