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

时间:2013-03-29 20:47:17

标签: javascript jquery jsf liferay

我正在使用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相同的绑定值?

2 个答案:

答案 0 :(得分:2)

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

function doSomething(){
    $("##{myBean.uiAbc.clientId}").val("hello everyone");
}

idbinding需要同名,这完全是胡说八道。

您可能遇到的唯一问题是默认的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。