使用javascript命令reRender字段

时间:2011-05-27 19:52:42

标签: java javascript jsf rerender

我有两个字段。一个是h:selectOneMenu,带有一个地方列表。另一个是h:inputText。

我要做的是,如果用户在selectOneMenu上选择了地点,并点击了搜索,那么它就会搜索该地点。如果他在selectOneMenu上选择一个地方并仍然在inputText上输入其他地方并点击搜索,那么它将搜索所写的地点而不是所选地点。

因此,如果用户在inputtext上键入任何内容,它会很棒,它会禁用selectOneMenu,如果他清除该字段,它将再次启用。我尝试使用javascript on event

  

onchange =“if(this.value!='')   的document.getElementById( 'placeSelectOneMenu')。禁用= '真'“

但它不起作用。我能做什么?有什么想法吗?

它仅在我点击搜索时有效,而不是正确地重新显示该字段。我想要的是动态reRender。

1 个答案:

答案 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标签。