Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 在f:ajax渲染中引用复合组件ID_Jsf_Composite Component_Clientid_Ajax Update - Fatal编程技术网

Jsf 在f:ajax渲染中引用复合组件ID

Jsf 在f:ajax渲染中引用复合组件ID,jsf,composite-component,clientid,ajax-update,Jsf,Composite Component,Clientid,Ajax Update,我正在编写一个复合组件,用于包装输入元素,并使用“可选字段”名称和下面的h:message元素对其进行扩充。 以下是组件(在input.xhtml文件中): 我试过使用f1:ii1,:f1:ii1,但没有用。当我使用msgId或:f1:ii1:msgId时,它会工作。有人知道为什么吗 我使用的是Mojarra 2.1.3 这是因为复合组件本身不会向HTML呈现任何内容。只有它的子项被呈现为HTML。生成的HTML输出中不存在ID为f1:i11的任何HTML元素。在浏览器中打开页面,右键单击并查看

我正在编写一个复合组件,用于包装输入元素,并使用“可选字段”名称和下面的h:message元素对其进行扩充。 以下是组件(在input.xhtml文件中):

我试过使用
f1:ii1
:f1:ii1
,但没有用。当我使用
msgId
:f1:ii1:msgId
时,它会工作。有人知道为什么吗

我使用的是Mojarra 2.1.3


这是因为复合组件本身不会向HTML呈现任何内容。只有它的子项被呈现为HTML。生成的HTML输出中不存在ID为f1:i11的任何HTML元素。在浏览器中打开页面,右键单击并查看源代码。你自己看看里面。没有这样的ID元素。JavaScript/Ajax遇到了完全相同的问题。它找不到要更新的元素

要解决这个问题,您需要将整个复合体包装在HTML
中,并为其分配一个基本打印的ID
{cc.clientId}


...
然后,您可以按如下方式引用它:

<my:input id="foo" />
...
<f:ajax ... render="foo" />

...
您甚至可以引用特定的复合构件子构件

<f:ajax ... render="foo:inputId" />

另见:
...   
         <h:outputLabel styleClass="sectionBody" for="i1"
            value="Input 1"></h:outputLabel>
         <my:input id="ii1">
            <h:inputText id="i1" size="20" maxlength="20" tabindex="0"
            required="true" label="Input 1">
               <f:ajax listener="#{myBean.checkInput1}" 
                  event="blur" 
                  render="ii1"/>
            </h:inputText>
         </my:input>
...
malformedXML: During update: f1:ii1 not found
<cc:implementation>
    <div id="#{cc.clientId}">
        ...
    </div>
</cc:implementation>
<my:input id="foo" />
...
<f:ajax ... render="foo" />
<f:ajax ... render="foo:inputId" />