我正在使用jsf和liferay。我很新。对于任何为某些javascript或jquery方法选择jsf的任何元素的javascript方法,我需要将其设置为。
<h:inputText id="abc" binding="#{abc}"/>
请注意我设置的绑定与id相同,有人告诉我这样做。没有像我那样设置绑定我无法在我的javascript方法中选择任何元素。我真的不知道原因。由于这对我有用,所以我使用它,没有详细说明
但是现在对于某些功能我真的需要实际使用绑定,将UIInput绑定到托管bean。所以我改变了我的标签。
<h:inputText id="abc" binding="#{mybean.uiAbc}"/>
在这种情况下,我的javascript方法如
function doSomething(){
$("##{abc.clientId}").val("hello everyone");
}
它不起作用。它给了我一个例外......例如#undefined ..
在javascript中,我与绑定无关,为什么它现在停止工作?为什么它早期使用与id相同的绑定值?
答案 0 :(得分:2)
如果您将binding="#{abc}"
替换为binding="#{myBean.uiAbc}"
,那么您显然也应该#{abc.clientId}
更改视图中其他地方的#{myBean.uiAbc.clientId}
。
function doSomething(){
$("##{myBean.uiAbc.clientId}").val("hello everyone");
}
id
和binding
需要同名,这完全是胡说八道。
您可能遇到的唯一问题是默认的JSF命名容器分隔符:
是CSS选择器中的特殊字符,就像在jQuery中使用的那样,因此这个结构可能会失败。只有在您手动重新配置JSF Web应用程序以使用其他CSS安全字符-
或_
时,此构造才有效。如果您确实使用默认值:
,那么您应该使用
function doSomething(){
$("[id='#{myBean.uiAbc.clientId}']").val("hello everyone");
}
答案 1 :(得分:0)
你的跟随神话是错误的,即具有相同的id和绑定属性。
id="abc" binding="#{abc}"
JSF呈现具有id的组件,由我们提供前面的表单id。例如在你的情况下,它将是,
:formId:abc
要避免在prependId属性设置为false之前预先填写表单id。它将仅使用id“abc”呈现组件。
此外,如果您的组件是命名容器,例如数据表。那么访问客户端ID的方法就不同了。
简而言之,只需右键单击浏览器并检查元素的id,就可以找到jQuery的id。