【发布时间】:2011-09-12 17:15:18
【问题描述】:
我正在使用 jsf 1.2 并且有一些奇怪的 javascript,这些 javascript 在我的项目中的多个地方重复出现。
我不想重复自己......但我发现没有办法做类似的事情:
<ui:composition>
<c:set var="confirmBlockJS" value="if (confirm('#{tk:encodeJS(confirmMessage)}')) {#{confirmed}} else{ #{notConfirmed}}"/>
</ui:composition>
现在我想使用 set 变量但是 obv 这会失败。
<ui:include src="/blocks/tech/confirmBlock.xhtml">
<ui:param name="confirmMessage" value="#{appTexts['action.logout.title']}"/>
<ui:param name="confirmed" value="return false;"/>
<ui:param name="notConfirmed" value=" #{doJS}"/>
</ui:include>
<h:outputLink id="logout" value="#" rendered="#{renderLogout}"
onclick='#{confirmBlockJS};'
styleClass="_allowEnterKey">
<h:outputText value="#{appTexts['action.logout']}"></h:outputText>
</h:outputLink>
confirmBlockJS 在这一点上显然是空的,这在我看来实际上是一件好事。但是有没有办法将变量向上传递?我试过 ui:param 没有运气。
解决方案
当您想在使用ui:decorate 的页面之外访问使用c:set 设置的变量时,请使用ui:decorate。它仍然是可见的。在 ui:include 的情况下,c:set 将在外部不可见,但 ui:param 应该传递它(例如,在 ui:include 组合中使用 ui:param 而不是 c:set)
【问题讨论】:
标签: jsf variables facelets visibility dry