JSP EL和Scriptlets - 如何避免混合jstl和scriptlet变量

时间:2009-07-07 00:20:12

标签: model-view-controller jsp

通过jsp el

访问非属性

在下面的代码中,我需要访问一个非属性的方法。我需要一个c:foreach变量作为测试可见。我正在处理别人的代码。我对它的设计并不是特别满意,但在处理别人的代码时这很容易。

我更愿意在控制器中设置实际的可见角色,但所有数据都是从多个位置的全局缓存中读取的。下面的垃圾代表了获得所需行为的最少代码行。

< c:forEach var =“role”items =“$ {resource.value.rs}”>

//无权访问scriptlet上下文中的角色

< c:if test =“<%role.isVisible(session.getAttribute(”authUser“))%>”>

< / C:如果> < / C:的foreach>

一个简单的解决方案就是..如果我能做到:

//不能通过el调用isVisible我不相信

< c:if test =“$ {role.isVisible(session.authUser)}”>

但我很确定你做不到。

我正在重写以避免使用scriptlet,但如果有人快速修复,我会接受它。

感谢。

1 个答案:

答案 0 :(得分:1)

  

我更愿意在控制器中设置实际的可见角色,但所有数据都是从多个位置的全局缓存中读取的

如果我理解正确,应该不是问题。

我假设authUser在会话范围内

session.authUser

如果没有,则设置它:

<c:set var"authUser" value="${session.authUser}" scope="session" />

然后你要做的就是找到一种方法,将authUser从会话中提供给角色Bean,允许你:

<c:if test="${role.isVisible}">

aah也许不是..

我想我会写一个自定义标签

<mytag:isVisible role="${role}" user="${session.authUser}">
    // do work
</mytag:isVisible>