Нello,
我在jsp环境中编程,我需要执行以下操作:
在<内部的迭代器中。 S:如果>我必须进行一个查询,从一个输入字段中获取一个值并使用另一个输入字段中的另一个值减去它并将其设置为变量,然后执行相同的操作,但这次添加第二个值,并设置结果到第二个变量,最后将两个结果传递给查询。减法有效,但是在设置第二个变量时,它只是将第二个输入字段的值附加到第一个的值,而不是添加。我怎样才能在s:property中解决这个问题?我尝试过使用< s:property value =“$ {”(...)first“+”(...)second“}”/>,但它给了我一个错误,它不支持运行时表达式。代码:
<s:set name="thequery">
<s:iterator value="#attr.var" status="status">
<%--(...)other unrelevant code--%>
<s:if test="#attr.xinput3[#status.index] != 0">
<%--the one below works fine-->
<s:set name="around1">
<s:property value="#attr.xinput[#status.index]-#attr.xinput3[#status.index]" />
</s:set>
<%--this one just appends the value of xinput3[] to the value of xinput[], instead of adding them-->
<s:set name="around2">
<s:property value="#attr.xinput[#status.index]+#attr.xinput3[#status.index]" />
</s:set>
<s:property value="#attr.xvar[#status.index]" />=<s:property
value="around1" />!<s:property value="around2" />;</s:if>
<s:else>
<%--unrelevant code--%>
</s:else>
</s:iterator>
</s:set>
结果:例如,xinput [] = 12和xinput3 [] = 2:
10 122;!
虽然我需要它
10 14;!
我该如何解决这个问题?
答案 0 :(得分:0)
您的值被解释为字符串而不是数字。如果值是整数,则可以在添加之前创建它们的新Integer对象。
<s:property value="new java.lang.Integer(#attr.xinput[#status.index]) +
new java.lang.Integer(#attr.xinput3[#status.index])" />
答案 1 :(得分:0)
我自己找到了答案:
<s:if test="#attr.xinput3[#status.index] != 0">
<s:set name="around1">${xinput[status.index]-xinput3[status.index]}</s:set>
<s:set name="around2">${xinput[status.index]+xinput3[status.index]}</s:set>
<s:property value="#attr.xvar[#status.index]" />=<s:property
value="around1" />!<s:property value="around2" />;</s:if>
结果&lt; S:集&gt;支持运行时表达式,如果以上面的方式编写。现在工作正常。