1

我正在使用 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");
}

它不工作。它给了我例外... # 是未定义的..

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

4

2 回答 2

2

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

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

That the id and binding need have to be the same name is complete nonsense.

The only problem which you may face is that the default JSF naming container separator character, :, is a special character in CSS selectors, like as used in jQuery, and thus this construct would possibly fail. This construct would only work if you've manually reconfigured your JSF webapp to use a different, CSS-safe, character like - or _. If you indeed use the default of :, then you should use

function doSomething(){
    $("[id='#{myBean.uiAbc.clientId}']").val("hello everyone");
}

See also:

于 2013-03-30T11:10:28.150 回答
0

您的追随神话是错误的,即具有相同的 id 和绑定属性。

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

JSF 使用我们提供的 id 渲染组件,前面是表单 id。例如,在你的情况下,它会是,

:formId:abc

为避免在表单 id 前面添加,只需将 prependId 属性设置为 false。它只会渲染 id 为“abc”的组件。

此外,如果您的组件正在命名容器,例如 dataTable。那么你访问客户端ID的方法是不同的。

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

于 2013-03-30T09:51:46.233 回答