我使用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");
}
id
和binding
必须是相同的名称是完全没有意义的。
您可能面临的唯一问题是,默认的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。