【问题标题】:How to access custom JSF tags through javascript getElementById如何通过 javascript getElementById 访问自定义 JSF 标签
【发布时间】:2011-08-12 14:36:43
【问题描述】:

我有以下代码。

<h:form id="Form">
  <div class="pageBody">
    <h:outputLabel id="lbl" styleClass="formLabel" value="#{messages['lable.email']}:" />
    <s:button id="login" label="#{messages['login.button']}" actionBean="#{account}" actionMethod="login" />
  </div>
</h:form>

这里是javascript

var obj = document.getElementById("Form:lbl");  //This works
var obj1 = document.getElementById("Form:login"); //This doesnt work

请记住,&lt;s:button&gt; 是一个自定义 JSF 组件。

感谢任何帮助

【问题讨论】:

    标签: javascript jsf-2


    【解决方案1】:

    它应该适用于自定义组件。它是自定义组件还是复合组件?您遇到的问题以及 JSF 2.0 标记的存在表明它实际上componsite component。自定义标签、自定义组件和复合组件的区别,查看When to use <ui:include>, tag files, composite components and/or custom components?

    在这个答案中,我假设它确实是一个复合组件。

    首先,JavaScript 与 HTML DOM 树一起工作,而不是与 JSF 组件树一起工作。 JavaScript 即在网络浏览器上运行,而不是在网络服务器上运行。 JSF 在 webserver 上运行,生成一堆 HTML 并将其发送到 webbrowser。 document.getElementById() 只接受 HTML DOM 元素 ID。

    所以,要找出 &lt;s:button&gt; 生成的 HTML DOM 元素 ID,您应该在 Web 浏览器中打开 JSF 页面,右键单击,然后 查看源代码 并找到生成的 HTML 元素在 HTML 源代码中。

    如果您的&lt;s:button id="login"&gt; 复合组件又在实现中使用例如&lt;h:commandButton id="button"&gt;,那么它看起来像这样:

    <input type="submit" id="Form:login:button" />
    

    一个复合组件本身,即NamingContainer 组件,它会像这样预先添加ID。 &lt;h:form&gt; 也是这样一个组件。这使您可以在同一个父容器内使用多个复合组件。

    你应该在你的 JavaScript 函数中使用 那个 ID。

    var button = document.getElementById("Form:login:button");
    

    【讨论】:

    • 感谢我在 chrome 中进行了检查。该按钮有自己的 xhtml。我只需要输入 的 id 就可以了
    • 不客气。由于您是新来的,请不要忘记将有助于(最)解决问题的答案标记为已接受。另见meta.stackexchange.com/questions/5234/… 在以后的JSF问题中,请特别注意使用的术语,以便更好地理解问题:)
    猜你喜欢
    • 2014-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 2021-11-16
    相关资源
    最近更新 更多