Я использую jsf 1.2 и получил какой-то странный 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>
verifyBlockJS, очевидно, пуст в этот момент, что на самом деле является хорошей вещью для меня. Но нет ли способа передать переменную вверх? Я попробовал ui: param без удачи.
РЕШЕНИЕ
Используйте ui:decorate
, если вы хотите получить доступ к переменной, установленной с помощью c:set
вне страницы, которая использует ui:decorate
. Это все еще будет видно. В случае ui: include набор c: не будет виден снаружи, но ui: param должен его пропустить (например, используйте ui: param вместо c:set
в композиции ui:include
)