设置表达式'supplierPaidChecks [0] .checkNo'时出错,值为'[Ljava.lang.String; @ 1ac1423' [英] Error setting expression 'supplierPaidChecks[0].checkNo' with value '[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屋!