Вы можете использовать область запроса, вы должны только передать условие в качестве параметра запроса для последующих запросов с помощью <f:param>
вместо поля скрытого ввода JSF <h:inputHidden>
.Значение скрытого поля ввода устанавливается только в модели на этапе обновления значений модели, в то время как условие атрибута rendered
уже оценивается на более раннем этапе применения значений запроса.
Итак, используйте <f:param>
вместо <h:inputHidden>
:
<h:form id="form1">
<h:commandButton id="button1" value="One" action="#{bean.click1}"
rendered="#{bean.show1}">
<f:param name="show1" value="#{bean.show1}" />
</h:commandButton>
</h:form>
<h:form id="form2">
<h:commandButton id="button2" value="Two" action="#{bean.click2}">
<f:param name="show1" value="#{bean.show1}" />
</h:commandButton>
</h:form>
Таким образом, вы можете извлечь их как параметр запроса в конструкторе (post) компонента.
public JsfTrial() {
String show1 = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("show1");
this.show1 = (show1 != null) && Boolean.valueOf(show1);
}
Ужасно, но CDI не предлагает встроенную аннотацию, которая заменяет JSF @ManagedProperty("#{param.show1}")
.Однако вы можете homegrow такую аннотацию.