当第一次呈现页面时,文本框为空,当我单击一个按钮并调用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
。
有人可以告诉我可能会出现什么问题吗?
答案 0 :(得分:0)
这是我的问题的答案
内容的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>