使用JSTL“动态”参数名称

时间:2011-10-02 07:42:04

标签: servlets jstl el

JSTL代码:

<c:forEach var = "currentUser" items = "${users}">
    <c:out value = "${currentUser.userName}" /></p>
    <c:if test = "${!empty param.${currentUser.id}}">
        <p>Details</p>
    </c:if>
</c:forEach>

我有一个用户对象列表,我显示了他们所有的名字。如果想要查看任何用户的详细信息,请求将发送到servlet,该servlet将返回名为id和DetailUser对象的Attribute

的Servlet

req.setAttribute(currentUSer.getId, userDetails);

问题是,现在如果必须在if测试中使用“id”的值不作为参数,而是使用参数名称。我在EL表达式中尝试过EL,但我确信它不被允许。还有其他建议吗?

1 个答案:

答案 0 :(得分:0)

在我看来,你使它变得比它更复杂。我只是做

req.setAttribute("userDetails", userDetails);

并在JSP中测试当前用户的ID是否与要详细的ID相同:

<c:if test="${userDetails.id == currentUser.id}">
    <p>Details</p>
</c:if>

BTW,param.foo返回请求参数的值,而不是请求属性的值。 你可以使用

做你想做的事
<c:if test = "${!empty requestScope[currentUser.id]}">

[]符号而不是.运算符是传递动态名称而非静态名称的方法。