使用Javascript获取JSF定义的组件

使用Javascript获取JSF定义的组件,javascript,jsf,composite-component,Javascript,Jsf,Composite Component,我正在使用JSF创建一个接口,如果第二个文本字段尚未设置,我希望其中一个文本字段的值提供第二个文本字段的默认值。关键代码如下所示: <h:outputScript> function suggestValue2() { var value2 = document.getElementById('value2').value; if (value2 == "") { document.getElementById('value2').value = do

我正在使用JSF创建一个接口,如果第二个文本字段尚未设置,我希望其中一个文本字段的值提供第二个文本字段的默认值。关键代码如下所示:

<h:outputScript>
function suggestValue2() {
    var value2 = document.getElementById('value2').value;
    if (value2 == "") {
        document.getElementById('value2').value = document.getElementById('value1').value;
    }
}
</h:outputScript>

<h:inputText
    id="value1"
    onblur="suggestValue2();" />

<h:inputText
    id="value2" />
问题是这实际上不起作用。这两个输入元素的实际id以一些JSF生成的值作为前缀,这些值存储getElementById调用。对于我来说,实现我在这里想要实现的目标的最佳方式是什么?
编辑:我应该注意,这将出现在一个复合组件中,它可能会在一个页面上出现多次。JSF动态设置实际ID表示所需的行为。

JSF使用一个概念命名容器,该容器表示ID在所提供的容器中不必是唯一的。如果容器有一个Id,那么如果您没有给容器一个Id,jsf会在元素之前附加不可预测的值。有了容器id,它就变成了containerid:elements id。这可以在JavaScript中可靠地使用。

Jsf使用了一个概念命名容器,表示id在所提供的容器中不必是唯一的。如果容器有一个Id,那么如果您没有给容器一个Id,jsf会在元素之前附加不可预测的值。使用容器id,它将成为containerid:elements id。这可以在JavaScript中可靠地使用

将组件绑定到视图

<h:inputText binding="#{input1}" ... />
正如您提到的,您在一个复合组件中,最好知道复合组件自己的客户机ID已经通过{cc.clientId}可用。因此,更推荐的替代方案是:

<cc:implementation>
    <h:outputScript>
        var input1 = document.getElementById('#{cc.clientId}:input1');
        // ...
    </h:outputScript>
    ...
    <h:inputText id="input1" ... />
    ...
</cc:implementation>
另见:
将组件绑定到视图

<h:inputText binding="#{input1}" ... />
正如您提到的,您在一个复合组件中,最好知道复合组件自己的客户机ID已经通过{cc.clientId}可用。因此,更推荐的替代方案是:

<cc:implementation>
    <h:outputScript>
        var input1 = document.getElementById('#{cc.clientId}:input1');
        // ...
    </h:outputScript>
    ...
    <h:inputText id="input1" ... />
    ...
</cc:implementation>
另见:
解决此问题的最简单方法是在表单中使用。另一种方法是使用表单id和组件id查找它,如建议的myFormId:value1。解决此问题的最简单方法是在表单中使用。另一种方法是使用表单id和组件id查找它,如建议的myFormId:value1。动态ID分配代表所需的行为-没有它,页面将无法工作。请参阅上面的编辑。很抱歉,我没有更清楚地说明这一点。动态ID分配表示所需的行为-没有它,页面将无法工作。{cc.clientId}:前缀正是我所寻找的不引人注目的解决方案。非常感谢。{cc.clientId}:前缀正是我一直在寻找的一种不引人注目的解决方案。非常感谢。