问题描述
|
我有2个字段。一个是带有位置列表的h:selectOneMenu。另一个是h:inputText。
我要尝试做的是,如果用户在selectOneMenu上选择位置,然后单击搜索,它将搜索该位置。如果他在selectOneMenu上选择了一个位置,但仍在inputText上键入了其他位置并单击了搜索,它将搜索所写的位置而不是所选位置。
因此,如果用户在输入文本上键入任何内容,将会很棒,它将禁用selectOneMenu,如果他清除了该字段,则会再次启用它。我在事件上尝试使用javascript
onchange = \“ if(this.value!= \'\')
document.getElementById(\'placeSelectOneMenu \')。disabled = \'true \'\“
但这没用。我能做什么?有任何想法吗?
仅当我单击搜索时,它才起作用,然后正确地重新渲染该字段。我想要的是动态重新渲染。
解决方法
元素ID必须是生成的HTML元素ID的ID,而不是JSF组件ID。 JavaScript完全没有服务器端JSF代码的概念。它所看到和访问的只是JSF生成的HTML DOM树。在浏览器中打开页面,右键单击它,然后选择“查看源代码”。生成的
<h:selectOneMenu id=\"placeSelectOneMenu\">
的HTML应该如下所示
<select id=\"someFormId:placeSelectOneMenu\">
(其中someFormId
是父级<h:form>
的ID)
在这种情况下,您需要按以下方式获取它
document.getElementById(\'someFormId:placeSelectOneMenu\')
但是由于更改客户端的HTML输入元素而不通知服务器端的JSF会导致意外的行为(如果您通过纯JS在客户端启用它,那么就不会在服务器端神奇地启用它以及JSF不会处理最初被禁用的字段的提交值)并且您正在使用RichFaces,我建议您使用纯JSF方法,例如RichFaces 3.x <a4j:support>
标签。