【问题标题】:reRender a field with javascript command使用 javascript 命令重新渲染字段
【发布时间】:2011-09-03 15:56:33
【问题描述】:

我有 2 个字段。一个是带有地点列表的 h:selectOneMenu。另一个是 h:inputText。

我想要做的是,如果用户在 selectOneMenu 上选择地点,然后点击搜索,它将搜索那个地点。如果他在 selectOneMenu 上选择了一个地方,但仍然在 inputText 上键入其他地方并单击搜索,它将搜索已写入的地方而不是选定的地方。

所以,如果用户在 inputtext 上键入任何内容,它会禁用 selectOneMenu,如果他清除该字段,它将再次启用,这将是非常棒的。我尝试在事件中使用 javascript

onchange="if (this.value !='') document.getElementById('placeSelectOneMenu').disabled='true'"

但它没有用。我能做些什么?有什么想法吗?

它仅在我单击搜索时才有效,而不是正确地重新呈现该字段。我想要的是动态重新渲染。

【问题讨论】:

  • "reRender" 是 RichFaces 3.x 特定的属性名称。您使用的是 RichFaces 3.x 吗?这不是 JavaScript 特定的术语或其他东西。请谨慎使用术语,因为滥用/误解会导致混淆。

标签: java javascript jsf rerender


【解决方案1】:

元素 ID 需要是生成的 HTML 元素 ID 的 ID,而不是 JSF 组件 ID。 JavaScript 完全没有服务器端 JSF 代码的概念。它所能看到和访问的只是 JSF 生成的 HTML DOM 树。在浏览器中打开页面,右键单击它并选择查看源代码<h:selectOneMenu id="placeSelectOneMenu"> 生成的 HTML 应该是这样的

<select id="someFormId:placeSelectOneMenu">

(其中someFormId 是父&lt;h:form&gt; 的ID)

这种情况下,需要改为如下方式获取

document.getElementById('someFormId:placeSelectOneMenu')

但是由于在客户端更改HTML输入元素而不通知服务器端JSF可能会导致意外行为(如果您在客户端通过纯JS启用它,那么它不会神奇地在服务器端启用服务器端也是如此,JSF 不会处理最初禁用的字段的提交值)并且您正在使用 RichFaces,我建议您使用纯 JSF 方法,例如使用 RichFaces 3.x 的&lt;a4j:support&gt;标记。

【讨论】:

    猜你喜欢
    • 2011-09-15
    • 1970-01-01
    • 2021-12-18
    • 2018-05-06
    • 2016-07-27
    • 2013-09-22
    • 1970-01-01
    • 2020-12-30
    • 2012-06-09
    相关资源
    最近更新 更多