我正在创建一个动态生成的菜单。在数据库中,我存储了每个子菜单的目录(String
)并存储在bean中的ArrayList
中。这是代码的一部分:
<c:forEach items="#{controlWeb.algorithms}" var="alg">
<h:form>
<h:commandLink actionListener="#{controlWeb.setContent(PROBLEM)}" value="About"/>
</h:form>
</c:forEach>
问题在于“问题”。我想写#{alg.algorithm1}
并且它不起作用,因为我认为嵌套EL表达式是不可行的。
actionListener
将String
#{alg.algorithm1}
设置为另一个String
。我怎样才能达到要求?
答案 0 :(得分:10)
使用action
,而不是actionListener
。 actionListener
必须绑定到一个方法,该方法以ActionEvent
为唯一参数,没有任何借口。此外,actionListener
并非打算调用操作,而是监听操作(以便您可以记录或执行某些预处理任务或其他任务)
<c:forEach items="#{controlWeb.algorithms}" var="alg">
<h:form>
<h:commandLink action="#{controlWeb.setContent(alg.algorithm)}" value="About"/>
</h:form>
</c:forEach>
请注意,只有在Servlet 3.0 / Java EE 6中附带的EL 2.2之后才支持在EL中传递参数。您需要确保使用兼容Servlet 3.0的Servlet 3.0兼容容器{{1} }。