我有两个字段。一个是h:selectOneMenu,带有一个地方列表。另一个是h:inputText。
我要做的是,如果用户在selectOneMenu上选择了地点,并点击了搜索,那么它就会搜索该地点。如果他在selectOneMenu上选择一个地方并仍然在inputText上输入其他地方并点击搜索,那么它将搜索所写的地点而不是所选地点。
因此,如果用户在inputtext上键入任何内容,它会很棒,它会禁用selectOneMenu,如果他清除该字段,它将再次启用。我尝试使用javascript on event
onchange =“if(this.value!='') 的document.getElementById( 'placeSelectOneMenu')。禁用= '真'“
但它不起作用。我能做什么?有什么想法吗?
它仅在我点击搜索时有效,而不是正确地重新显示该字段。我想要的是动态reRender。
答案 0 :(得分:1)
元素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的{{1标签。