当页面第一次呈现时,文本框为空,当我单击按钮并调用action
并像这样更新值时,它工作了,文本框更新为新值
Flash flash = FacesContext.getCurrentInstance().getExternalContext()
.getFlash();
flash.put("errorMessage",featuesObj.getName() + "Some Error came");
<h:inputText value="#{flash.errorMessage }" id="mymessage" />
但是现在在textbox
中做了一些改变,增加了rendered
现在不显示的文本框,即使按下命令按钮,而#{flash.errorMessage}
已经有一些String
的值
<h:inputText value="#{flash.errorMessage}" rendered="#{flash.errorMessage.length() gt 0 }" id="mymessage" />
我也试过下面的代码
<h:inputText value="#{flash.errorMessage.length()}" id="mymessage" />
它总是显示false
在textbox
即使我按下按钮。
这就是我的问题的答案
内容的Ajax呈现,该内容本身是有条件呈现的
Ajax呈现完全发生在客户端,并期望要更新的HTML元素已经在jsf生成的HTML输出中。
当#{bean.renderResult}
默认为false时,将不起作用:
<h:form id="form">
<h:commandButton value="Submit" action="#{bean.toggleRenderResult}">
<f:ajax render=":result" />
</h:commandButton>
</h:form>
<h:outputText id="result" value="#{bean.result}" rendered="#{bean.renderResult}" />
您需要确保呈现ID指向一个已经存在于jsf生成的HTML输出中的组件。
<h:form id="form">
<h:commandButton value="Submit" action="#{bean.toggleRenderResult}">
<f:ajax render=":result" />
</h:commandButton>
</h:form>
<h:panelGroup id="result">
<h:outputText value="#{bean.result}" rendered="#{bean.renderResult}" />
</h:panelGroup>
http://balusc.blogspot.in/2011/09/communication -在jsf html - 20. # AjaxRenderingOfContentWhichIsByItselfConditionallyRendered