在JSTL中计算表达式

时间:2015-01-23 10:41:53

标签: java jsp jstl el

我的JSP中有以下代码:

<c:set var="myBoolean" value="item.lock${myappli.code.value()}"/>
<c:out value="${myBoolean}"/>
<c:out value="${requestScope[myBoolean]}"/>

在项目中我有几个布尔值lockCode1,lockCode2,....所以我使用第一行代码来获取字符串“item.lockCode1”,“item.lockCode2”。 这个表达式(item.lock $ {myappli.code.value()})工作正常。我用它来创建我的复选框:

<form:checkbox  path="item.lock${myappli.code.value()}"  value="item.lock${myappli.code.value()}"                                                       />

现在我想要的是评估“item.lockCode1”,“item.lockCode2”,....的值,以便我得到布尔值lockCodeX的值。

我写的时候

<c:out value="${myBoolean}"/>

显示: item.lockCodeX

我在stackoverflow上找到了第三行:

<c:out value="${requestScope[myBoolean]}"/>

我希望它会评估“item.lockCodeX”并给我'true'或'false',这就是它的价值。但它不起作用。我如何才能将我的表达式“item.lockCodeX”评估为true / false?

谢谢, 即

PS: 我的最终目标是我想(des)根据布尔item.lockCodeX的值激活复选框。 所以我想到了类似的东西:

<c:choose>
    <c:when test="here evaluate my expression to true/false">
        <form:checkbox          path="item.lock${myappli.code.value()}"
value="item.lock${myappli.code.value()}" disabled="false"/>
    </c:when>
    <c:otherwise>
        <form:checkbox          path="item.lock${myappli.code.value()}"
value="item.lock${myappli.code.value()}" disabled="true"/>
    </c:otherwise>
</c:choose>

PS2:我不能使用地图,代码就是这样,我无法改变它。

PS3:  我试着写:

 <c:when test="item.lock${myappli.code.value()}">

和  <c:when test="${item.lock${myappli.code.value()}}"> 但它不起作用。

PS4: 以下是对象项的相关行:

public class Lot extends BaseEntite {

...

    private Boolean lockBEL;

    private Boolean lockPAR

    private Boolean lockCIA;

    private Boolean lockAFA;

    private Boolean lockLO;
...

在我的Controller中,我从webservice获取对象,并将其放入我的ModelAttribute searchForm中:

searchMetier.getResultsSearch(context, this.formToDemand(searchForm));

1 个答案:

答案 0 :(得分:0)

我从您的代码中看到的是该行

<c:set var="myBoolean" value="item.lock${myappli.code.value()}"/> 为您提供String值,因此您无法真正访问Boolean字段。为此,您需要检索值项目Object本身,以便将Boolean值设为item.lockBEL.value()

我会尝试如下:

<c:set var="myItem" value="${item}">

<c:set var="myBoolean" value="${myItem.lockBEL.value()}"

如果你想要锁定+(BEL或PAR或......),你应该使用EL提供的一些技术,如连接,一些信息here。问题是我对EL不是很熟悉,但是我看到没有人回复我决定尝试一下。

PS:我发现您将字段设置为私有字段,因此您应该提供一些公共getter来访问它们,可能会这样:{$myItem.getLockBEL().value()}