JSF2.0复合组件ID生成

时间:2010-12-24 09:31:39

标签: jsf components jsf-2

我正在使用Weblogic 11g上的JSF2.0创建新的Web应用程序。我正在使用JSF Ajax进行表单提交。我对JSF很新,所以还在学习绳索。主页面在jQuery选项卡上各有3个表单。原始代码有很多重复的输入字段,如userName和password等(id前缀为表单id,即myform1:userName)。我决定将复合组件用于重复的字段是个好主意。这是我的Conponent代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

  <html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:composite="http://java.sun.com/jsf/composite"
  xmlns:h="http://java.sun.com/jsf/html">

<composite:interface>
    <composite:attribute name="value" required="true"/>
</composite:interface>

<composite:implementation>

<label for="#{cc.id}">User Name</label>
<h:inputText
        id="#{cc.id}"
        size="15"
        value="#{cc.attrs.value}"
        required="true"
        label="User Name">
</h:inputText>
</composite:implementation>

</html>

这是对xhtml中的Component的调用:

<p>
    <cc:userName id="userName" value="#{soapTestingBackingBean.userName}"/>
</p>

现在的问题是我的所有id都有一个添加的元素,所以变成了myForm1:userName:userName。虽然这不是一个显示停止,但它确实意味着我的javascript现在必须引用long ID并且在我的Ajax调用中也是相同的(我通常执行@form但渲染特定元素)。我正在尝试使代码尽可能可读和可维护。所以,如果有人知道是否有一个优雅的工作,或者可能是一些魔法属性我错过了关闭,所以将不胜感激。我确实尝试过tomahawk库中的forceID属性,但这只会导致我的Ajax调用出现其他问题。谢谢。

1 个答案:

答案 0 :(得分:0)

一些java脚本库jQuery遇到jsf 2.0 ids形式的新格式问题:elementId - 所以不使用

$(function() {
    $( "#datepicker" ).datepicker();
});

我必须使用

$(function() {
    $(document.getElementById('addform:datepicker')).datepicker();
});