【问题标题】:Using JSTL "dynamic" parameter name使用 JSTL“动态”参数名称
【发布时间】:2011-11-29 07:44:28
【问题描述】:

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 对象

小服务程序:

req.setAttribute(currentUSer.getId, userDetails);

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

【问题讨论】:

    标签: servlets jstl el


    【解决方案1】:

    在我看来,你让它变得比它可能的更复杂。我会这样做

    req.setAttribute("userDetails", userDetails);
    

    并且,在 JSP 中,测试当前用户的 ID 是否与所详述的 ID 相同:

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

    顺便说一句,param.foo 返回请求参数的值,而不是请求属性的值。 你可以通过使用来做你想做的事

    <c:if test = "${!empty requestScope[currentUser.id]}">
    

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

    【讨论】:

    • 谢谢!真的很有帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-22
    • 2015-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-24
    • 2014-07-15
    相关资源
    最近更新 更多