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



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

<h:inputText id="abc" binding="#{abc}"/>

请注意,我已经设置绑定相同的id,有人告诉我这样做。没有这样设置绑定,我就无法在javascript方法中选择任何元素。我真的不知道原因。因为这是为我工作,所以我已经使用它,没有去详细

但是现在对于一些功能,我真的需要实际使用绑定,绑定UIInput到managed bean。所以我把标签改成。

<h:inputText id="abc" binding="#{mybean.uiAbc}"/>

这里我的javascript方法是

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

它不工作。它给了我一个例外,比如……# is undefined.

在javascript中,我与绑定无关,所以为什么它现在停止工作?为什么它之前的绑定值和我的一样?

如果您将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");
}

参见:

  • 如何使用JSF生成的带有冒号":"在CSS选择器?

你的神话是错误的,即有相同的id和绑定属性。

id="abc" binding="#{abc}" 

JSF呈现带有id的组件,该id由我们提供,前面有表单id。例如,在你的情况下,它将是,

:formId:abc

要避免添加表单id,只需将prependId属性设置为false。它将只渲染id为"abc"的组件。

如果你的组件是命名容器,例如dataTable。那么你访问客户端id的方法是不同的。

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

相关内容

  • 没有找到相关文章

最新更新