inputText的绑定属性如何影响javascript方法?

inputText的绑定属性如何影响javascript方法?,javascript,jquery,jsf,liferay,Javascript,Jquery,Jsf,Liferay,我正在使用jsf和liferay。我对它很陌生。对于为某些javascript或jquery方法选择jsf元素的任何javascript方法,我需要将其设置为 <h:inputText id="abc" binding="#{abc}"/> 它不起作用。这给了我一个例外,就像。。。没有定义 在javascript中,我与绑定无关,那么为什么它现在停止工作呢?为什么它在早期使用与id相同的绑定值?您对以下内容的误解是错误的,即使用相同的id和绑定属性 id="abc" binding

我正在使用jsf和liferay。我对它很陌生。对于为某些javascript或jquery方法选择jsf元素的任何javascript方法,我需要将其设置为

<h:inputText id="abc" binding="#{abc}"/>
它不起作用。这给了我一个例外,就像。。。没有定义


在javascript中,我与绑定无关,那么为什么它现在停止工作呢?为什么它在早期使用与id相同的绑定值?

您对以下内容的误解是错误的,即使用相同的id和绑定属性

id="abc" binding="#{abc}" 
JSF使用我们提供的id呈现组件,前面的id是表单id。例如,在您的情况下

:formId:abc
为了避免在表单id前面加前缀,只需将prependId属性设置为false。它将仅呈现id为abc的组件

此外,如果您的组件正在命名容器,例如dataTable。然后您会发现访问客户端id的方法不同

简而言之,只需在浏览器中右键单击并检查元素的id,就可以找到jQuery的id。

如果您将binding={abc}替换为binding={myBean.uiAbc},那么您显然也应该将视图中其他地方的{abc.clientId}更改为{myBean.uiAbc.clientId}

id和绑定必须是相同的名称完全是胡说八道

您可能面临的唯一问题是,默认的JSF命名容器分隔符:,是CSS选择器中的一个特殊字符,就像jQuery中使用的那样,因此此构造可能会失败。只有在手动重新配置JSF webapp以使用不同的、CSS安全的、类似于字符的-或-时,此构造才会起作用。如果确实使用默认值:,则应使用

function doSomething(){
    $("[id='#{myBean.uiAbc.clientId}']").val("hello everyone");
}
另见:
${abc.clientId}.valhello移除中的每个人都应该像${abc.clientId}.valhello每个人;在$'formId\\\:componentId'中设置输入值的首选方法。valvaluejsf将呈现其id,使用将在javascript中提供id,如$j_id1942217253_73c3e264:abc.valuyz。谢谢你的回答。。。是的,这是胡说八道,但当我改变了绑定时,为什么它在以前工作而不是现在?除了装订,我什么都没改这可能是因为您将id与绑定混合,并且错误地假设所引用的组件将由{foo}而不是{bar}可用。事实并非如此。它是由{bar}提供的,不需要id。是的,我错了。。。我也只是在你的差异中找到了它,而且也是通过。感谢BalusC的解释和ans。我真的很感谢你的帮助:我认为你应该写一本关于JSF的书。我会喜欢的
:formId:abc
function doSomething(){
    $("##{myBean.uiAbc.clientId}").val("hello everyone");
}
function doSomething(){
    $("[id='#{myBean.uiAbc.clientId}']").val("hello everyone");
}