设置表达式'supplierPaidChecks [0] .checkNo'时出错,值为'[Ljava.lang.String; @ 1ac1423' [英] Error setting expression 'supplierPaidChecks[0].checkNo' with value '[Ljava.lang.String;@1ac1423'

查看:91
本文介绍了设置表达式'supplierPaidChecks [0] .checkNo'时出错,值为'[Ljava.lang.String; @ 1ac1423'的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am trying to assign values to object fields. Here I am assigning more than one instance of object from jsp page. I am setting these values to 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>

我的行动类

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 class

SupplierPaidDetails class

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
}

SupplierPaidChecks

SupplierPaidChecks

 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
 }

我跟着这个链接以获取从jsp到行动的设定值

I am following this link to get set values from jsp to 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 来保存您的值。 设置 -s通常没有排序,因此没有 get(index)方法。所以你不能像这样传递值: supplierPaidChecks [0] .checkNo 。当然你可以删除索引(例如 supplierPaidChecks.checkNo ),但由于你的集合持有对象并且你试图向它提交多个属性,它将导致不希望行为。

The issue is because you are using a Set to hold your values. Set-s normally don't have an ordering and therefore no get(index) method. So you cannot pass values to them like that: supplierPaidChecks[0].checkNo. Of course you can remove indexing (e.g. supplierPaidChecks.checkNo) but since your sets hold objects and you are trying to submit more than one property to it, it will lead to not desired behavior.

最好的解决方案是将 Set -s更改为 List -s如果你已经覆盖等于方法,那么将该逻辑拉到某个实用程序类并检查列表中其他对象的唯一性。

The best solution will be to change your Set-s to List-s and if you have overridden equals methods then pull that logic to some utility class and check uniqueness of objects in list elsewhere.

这篇关于设置表达式'supplierPaidChecks [0] .checkNo'时出错,值为'[Ljava.lang.String; @ 1ac1423'的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆