【问题标题】:JSF2.0 Composite Component ID generationJSF2.0 复合组件 ID 生成
【发布时间】:2023-03-23 18:49:01
【问题描述】:

我正在使用 Weblogic 11g 上的 JSF2.0 创建一个新的 Web 应用程序。我正在使用 JSF Ajax 进行表单提交。我对 JSF 很陌生,所以还在学习。主页在 jQuery 选项卡上各有 3 个表单。原始代码有很多重复的输入字段,如用户名和密码等(id 以表单 id 开头,即 myform1:userName)。我认为对重复字段使用复合组件是个好主意。这是我的组件代码:

<!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 中组件的调用:

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

现在的问题是我所有的 id 都添加了一个元素,所以变成了 myForm1:userName:userName。虽然这不是一个显示停止器,但它确实意味着我的 javascript 现在必须引用长 ID,并且在我的 Ajax 调用中也是如此(我通常执行 @form 但呈现特定元素)。我试图使代码尽可能地可读和可维护。所以如果有人知道是否有一个优雅的解决方法或者我错过了一些魔法属性来关闭它,我将不胜感激。我确实尝试了 tomahawk 库中的 forceID 属性,但这只是在我的 Ajax 调用中引起了额外的问题。谢谢。

【问题讨论】:

    标签: jsf components jsf-2


    【解决方案1】:

    一些 java 脚本库 jQuery 对 jsf 2.0 ids form:elementId 的新格式有问题 - 所以不要使用

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

    我不得不使用

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

    【讨论】:

    • 你不需要那样做。我使用以下语法:$("[id=islRequestForm:requestData:requestData]").toggle();
    猜你喜欢
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-28
    • 2011-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-03
    相关资源
    最近更新 更多