java - 使用值 'supplierPaidChecks[0].checkNo' 设置表达式 '[Ljava.lang.String;@1ac1423' 时出错

标签 java jsp struts2 set

我正在尝试为对象字段分配值。这里我从 jsp 页面分配了多个对象实例。我将这些值设置为 Set .

<s:if test="DDActionList.size>0"> 
    <s:iterator value="DDActionList" status="rowstatus">
        <div class="box">
            <span class="label">Check No</span>
            <span class="ib">
                <s:hidden name="supplierPaidChecks[%{#rowstatus.index}].id" id="id">
                    <s:param name="value">
                        <s:property value="id"/>
                    </s:param>
                </s:hidden>
                <s:textfield name="supplierPaidChecks[%{#rowstatus.index}].checkNo" id="checkNo">
                    <s:param name="value">
                        <s:property value="checkNo"/>
                    </s:param>
                </s:textfield>
            </span>
        </div>
        <div class="box">
            <span class="label">Dated</span>
            <span class="ib">
                <s:textfield name="supplierPaidChecks[%{#rowstatus.index}].dated" id="dated">
                    <s:param name="value">
                        <s:property value="dated"/>
                    </s:param>
                </s:textfield>
            </span>
        </div>
        <div class="box">
            <span class="label">Payable At</span>
            <span class="ib">
                <s:textfield name="supplierPaidChecks[%{#rowstatus.index}].payableAt" id="payableAt">
                    <s:param name="value">
                        <s:property value="payableAt"/>
                    </s:param>
                </s:textfield>
            </span>
        </div>
        <div class="box">
            <span class="label">Paid To Acc NO</span>
            <span class="ib">
                <s:textfield name="supplierPaidChecks[%{#rowstatus.index}].paidToAccNo" id="paidToAccNo">
                    <s:param name="value">
                        <s:property value="paidToAccNo"/>
                    </s:param>
                </s:textfield>
            </span>
        </div>
        <div class="box">
            <span class="label">To Bank</span>
            <span class="ib">
                <s:textfield name="supplierPaidChecks[%{#rowstatus.index}].paidToBank" id="paidToBank">
                    <s:param name="value">
                        <s:property value="paidToBank"/>
                    </s:param>
                </s:textfield>
            </span>
        </div>
        <div class="box">
            <span class="label">To Branch</span>
            <span class="ib">
                <s:textfield name="supplierPaidChecks[%{#rowstatus.index}].paidToBranch" id="paidToBranch">
                    <s:param name="value">
                        <s:property value="paidToBranch"/>
                    </s:param>
                </s:textfield>
            </span>
        </div>

    </s:iterator>
</s:if>

我的 Action 类

public class hbmCashAction extends ActionSupport implements ModelDriven<SupplierPaidDetails> {

    SupplierPaidDetails spa = new SupplierPaidDetails();

    public SupplierPaidDetails getSpa() {
        return spa;
    }

    public void setSpa(SupplierPaidDetails spa) {
        this.spa = spa;
    }

    public String update() {
        System.out.println("--------");
      Set <SupplierPaidCheck> ax=  spa.getSupplierPaidChecks();
        for (SupplierPaidCheck ss : ax) {
            System.out.println(ss.getId()+" "+ss.getPaidToAccNo()+" "+ss.getPayableAt());
        }
        System.out.println("--------");
        return SUCCESS;
    }

    @Override
    public SupplierPaidDetails getModel() {
        return spa;
    }
}

SupplierPaidDetails 类

public class SupplierPaidDetails  implements java.io.Serializable {


     private Long id;
     private SupplierPaymentDetails supplierPaymentDetails;
     private Float amount;
     private String paymentMode;
     private Date paymentDate;
     private Date addDate;
     private String status;
     private Set supplierPaidOnlines = new HashSet(0);
     private Set supplierPaidCashes = new HashSet(0);
     private Set supplierPaidChecks = new HashSet(0);
      //getter and setter
}

供应商付款支票

 public class SupplierPaidCheck  implements java.io.Serializable {
 private Long id;
 private SupplierPaidDetails supplierPaidDetails;
 private long checkNo;
 private Date dated;
 private String payableAt;
 private String paidToAccNo;
 private String paidToBank;
 private String paidToBranch;
 private Date addDate;
 private Float amount;
 private String status;
 // getter and setter
 }

我正在关注这个link从jsp获取设置值到action

我收到以下错误

May 05, 2014 3:38:54 PM com.opensymphony.xwork2.util.logging.commons.CommonsLogger warn
WARNING: Error setting expression 'supplierPaidChecks[0].checkNo' with value '[Ljava.lang.String;@1ac1423'
ognl.NoSuchPropertyException: java.util.HashSet.0
    at ognl.SetPropertyAccessor.getProperty(SetPropertyAccessor.java:68)
    at com.opensymphony.xwork2.ognl.accessor.XWorkCollectionPropertyAccessor.getProperty(XWorkCollectionPropertyAccessor.java:93)
    at ognl.OgnlRuntime.getProperty(OgnlRuntime.java:2317)
    at ognl.ASTProperty.getValueBody(ASTProperty.java:114)
    at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)
    at ognl.SimpleNode.getValue(SimpleNode.java:258)
    at ognl.ASTChain.setValueBody(ASTChain.java:222)
    at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:220)
    at ognl.SimpleNode.setValue(SimpleNode.java:301)
    at ognl.Ognl.setValue(Ognl.java:737)
    at com.opensymphony.xwork2.ognl.OgnlUtil.setValue(OgnlUtil.java:234)
    at com.opensymphony.xwork2.ognl.OgnlValueStack.trySetValue(OgnlValueStack.java:183)
    at com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(OgnlValueStack.java:170)
    at com.opensymphony.xwork2.ognl.OgnlValueStack.setParameter(OgnlValueStack.java:148)
    at com.opensymphony.xwork2.interceptor.ParametersInterceptor.setParameters(ParametersInterceptor.java:318)
    at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:231)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:239)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:191)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:73)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:91)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:252)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:161)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:193)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:189)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)
    at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:563)
    at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:434)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:744)

最佳答案

问题是因为您使用 Set 来保存您的值。 Set-s 通常没有顺序,因此没有 get(index) 方法。因此,您不能像这样向它们传递值:supplierPaidChecks[0].checkNo。当然,您可以删除索引(例如 supplierPaidChecks.checkNo),但由于您的集合保存对象并且您尝试向其提交多个属性,因此这将导致不期望的行为。

最好的解决方案是将您的 Set-s 更改为 List-s,如果您覆盖了 equals 方法,则提取该逻辑某些实用程序类并检查其他地方列表中对象的唯一性。

关于java - 使用值 'supplierPaidChecks[0].checkNo' 设置表达式 '[Ljava.lang.String;@1ac1423' 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23470075/

相关文章:

java - 如何避免使用通配符对继承的递归类进行强制转换?

java - 如何在 JSP 页面的不同部分调用 Java 方法

java - Struts2属性歧义

java - 初级 Java 代码问题

java - Android:如果我在文件夹 layout-sw.. 中创建 xmls,是否值得在默认布局文件夹中维护相同的 xmls?

java - 泰语字符显示??????在jsp中标记文件上传

java - 如何从 JSP 文件中删除实体(使用 Google App Engine 的 Java)

java - 使用struts2显示标签

java - 为什么JSON发送的数据在表格中显示不正确?

java - 支持在 HttpUnit 中发布 XML?