【发布时间】:2013-07-04 08:43:21
【问题描述】:
我的 jsf 页面中有 5 个输入文本。我想实现这个功能,如果在第一个 inputtext 中输入了一些文本,rest 4 应该被禁用。如果在剩余的 4 个输入文本中输入任何文本,则应禁用第一个输入文本。我对 jsf 很陌生,不知道该怎么做。请任何人帮忙。
【问题讨论】:
标签: ajax jsf primefaces facelets
我的 jsf 页面中有 5 个输入文本。我想实现这个功能,如果在第一个 inputtext 中输入了一些文本,rest 4 应该被禁用。如果在剩余的 4 个输入文本中输入任何文本,则应禁用第一个输入文本。我对 jsf 很陌生,不知道该怎么做。请任何人帮忙。
【问题讨论】:
标签: ajax jsf primefaces facelets
在 JSF 2 中,您可以这样做。
<h:inputText id="inputOne" value="#{bean.value1}" disabled="#{not empty bean.value2}">
<f:ajax event="keyup" render="inputTwo"/>
</h:inputText>
<h:inputText id="inputTwo" value="#{bean.value2}" disabled="#{not empty bean.value1}">
<f:ajax event="keyup" render="inputOne"/>
</h:inputText>
如果你有很多字段,最好在#{bean}中引入方法来执行所有检查,比#{not empty bean.value1 and not empty bean.value2 and not empty bean.value3}更简单
如果有许多分组的输入应该被禁用,您可以在<f:ajax> 标记的render 属性中将它们以空格分隔,或者将它们与<h:panelGroup/> 分组并呈现整个组。
<h:inputText id="inputOne" value="#{bean.value1}" disabled="#{not empty bean.value2 and not empty bean.value3 and not empty bean.value4}">
<f:ajax event="keyup" render="inputs"/>
</h:inputText>
<h:panelGroup id="inputs">
<h:inputText value="#{bean.value2}" disabled="#{not empty bean.value1}">
<f:ajax event="keyup" render="inputOne"/>
</h:inputText>
<h:inputText value="#{bean.value3}" disabled="#{not empty bean.value1}">
<f:ajax event="keyup" render="inputOne"/>
</h:inputText>
<h:inputText value="#{bean.value4}" disabled="#{not empty bean.value1}">
<f:ajax event="keyup" render="inputOne"/>
</h:inputText>
</h:panelGroup>
【讨论】:
render 空格分隔中列出您的ID。 “我应该怎么做才能实现这一目标。” - 在这里您需要向托管 bean 添加方法。类似public boolean isDisableValue1() {return StringUtils.isNotBlank(value2) && StringUtils.isNotBlank(value3) && StringUtils.isNotBlank(value4); } 并在disabled 属性中使用它:<h:inputText disabled="#{bean.disableValue1}"/>
render 空格分隔的 id 完成了它并且它正在工作。剩下的唯一问题是,当我使用退格键从 inputtext1 中删除并将其设为空时,其他四个将被启用。而如果我一次从 inputtext1 中删除整个文本,剩余的 4 个 inputtext 仍然被禁用。我将尝试通过使用托管 bean 中的方法来解决它。非常感谢您的帮助。