在我的应用程序中,我使用的是JSF 1.2。我不想使用facelets taglib,所以我使用jsp:include属性包含了一个JSP。我想将一个变量传递给子页面,该子页面将决定样式类的值。以下是parent.jsp的代码
<f:view>
...
<f:subview id="navigation">
<jsp:include page="/subpage/child.jsp">
<jsp:param value="page9" name="pageName"/>
</jsp:include>
</f:subview>
...
</f:view>
儿童jsp是
<f:subview id="navigation">
...
<t:commandLink id="page9" value="mylink" action="#{manageBean.someAction}"
styleClass="#{param.pageName == 'page9'?'stepLinkActive':'stepLink'}" />
...
</f:subview>
在上面的代码中,stepActiveLink类未应用于myLink。实际上#{param.pageName}值为空。
我在SO上找到了这个link,如果我使用如下所示的命令链接
,它就有效 <c:if test='${param.pagename eq "page9"}'>
<t:commandLink id="page9"
value="#{msgs['DICT.ISSUE_CONTROL.SPECIAL_INFO']} "
action="#{bondIssueBean.gotoModifyPage9}" styleClass="stepLinkActive" />
</c:if>
<c:if test='${param.pagename ne "page9"}'>
<t:commandLink id="page9"
value="#{msgs['DICT.ISSUE_CONTROL.SPECIAL_INFO']} "
action="#{bondIssueBean.gotoModifyPage9}" styleClass="stepLink" />
</c:if>
我有很多commandLinks需要复制命令链接定义才能更改样式类。我想知道,如果任何其他参数通过,那么它可能会增加重复代码。我的问题是
答案 0 :(得分:1)
“按设计”失败。有关技术背景故事,另请参阅JSF issue 629,其摘要如下:
在对这个问题进行一些讨论之后,我们将把这个问题标记为WONTFIX 原因如下:
- 主要是,如果没有这方面的话,这将不会在1.1中起作用 修复的效果,以使RI在较旧版本的Tomcat中工作。如 一旦删除该修复程序,jsp:param将不再有效。
- 1.2的修复非常危险,可能会出乎意料 添加它后产生的副作用。
然而,在<c:set>
的帮助下可能会有一种解决方法,将其复制到请求范围中,以便它也可以在JSF EL #{}
中使用。
<c:set var="param_pageName" value="${param.pageName}" scope="request" />
<t:commandLink id="page9" value="mylink" action="#{manageBean.someAction}"
styleClass="#{param_pageName == 'page9' ? 'stepLinkActive' : 'stepLink'}" />
答案 1 :(得分:-1)
您可以使用#{request.pageName} EL表达式访问传递的参数。这是区分大小写的,传递的参数存储在请求对象中。