我正在尝试根据jsf selectOneMenu中的选定值动态更新水印消息。用于水印组件的id是“waterMark1”。 水印组件链接到输入文本字段。 在valueChange上,我收到一条错误消息,指出无法找到id waterMarkID1。 我尝试根据selectOneMenu选择更新outputText并将id保持为WatermarkID1.It与outputText一起使用。
有没有办法根据bean值显示水印消息。非常感谢。
<h:selectOneMenu value="#{RequestBean.searchonType}" valueChangeListener="# {RequestBean.getValidateMsg}" id="searchUser">
<f:selectItems value="#{RequestBean.searchonTypeList}" />
<f:ajax event="change" update="waterMarkID1" render="waterMarkID1"/>
</h:selectOneMenu>
<h:inputText id="searchTxt" styleClass="text_small" size="50" value="#{RequestBean.searchTxt}"/>
<p:watermark id="waterMarkID1" for="searchTxt" value="#{RequestBean.waterMarkID}"/>
答案 0 :(得分:1)
您似乎无法直接更新p:watermark
组件。但是,更新容纳该组件的容器也会更新您的水印消息:
<p:panel id="panel1">
<h:selectOneMenu value="#{RequestBean.searchonType}" valueChangeListener="# {RequestBean.getValidateMsg}" id="searchUser">
<f:selectItems value="#{RequestBean.searchonTypeList}" />
<f:ajax event="change" render="panel1"/>
</h:selectOneMenu>
<h:inputText id="searchTxt" styleClass="text_small" size="50" value="#{RequestBean.searchTxt}"/>
<p:watermark id="waterMarkID1" for="searchTxt" value="#{RequestBean.waterMarkID}"/>
</panel>
请注意,您可以将p:panel
所包含的元素减少到例如h:inputText
和p:watermark
。关键是更新容器,而不是水印组件。
答案 1 :(得分:0)
我不建议更新包含水印的容器。在某些情况下,您可能必须更新整个表单组件,并且如果要从表单内部更新表单组件,则会陷入无限循环。 您可以通过将水印括在a中,然后不渲染面板来绕过此操作。
<p:outputPanel id="watermark" style="display:block">
<p:watermark/>
</p:outputPanel>
然后只需更新outputPanel。