这是我所做的:
var a = $(document.getElementById("panelForm:tableId01"));
$("<p:outputLabel value='Testing'/>").appendTo(a);
它不显示标签,但如果我这样做,例如,它可以工作:
$("<font color='red'>Red</font>").appendTo(a);
这是我所做的:
var a = $(document.getElementById("panelForm:tableId01"));
$("<p:outputLabel value='Testing'/>").appendTo(a);
它不显示标签,但如果我这样做,例如,它可以工作:
$("<font color='red'>Red</font>").appendTo(a);
您似乎完全错过了 JSF 的重点和 JavaScript 的上下文。
JSF 基本上是一个 HTML 代码生成器。要自己查看,请创建一个(简单且有效的)JSF 页面并在您最喜欢的网络浏览器中打开它。右键单击并选择查看源代码。你看到了什么?是的,这是一个完整的 HTML 代码!如果 JSF 正确地完成了它的工作,那么您应该不会看到任何 JSF 标记,原因很简单,因为 Web 浏览器不理解它们。它只理解 HTML。
JavaScript 是一种客户端语言,它运行在网络浏览器而不是网络服务器中。作为证据,当您在物理上不同的机器上运行 webserver 和 webbrowser 并调用 JavaScriptonclick="alert('peek-a-boo')"
时,您会在 webbrowser 中看到它,而不是在 webserver 中。JavaScript 可以看到 HTML DOM 树(任何可以通过document
对象获得的东西,例如document.getElementById("someId")
)。JavaScript 看不到负责生成该 HTML 的原始服务器端源代码,更不用说执行它了。对于 jQuery,它并没有什么不同,原因很简单,因为它是一个基于 JavaScript 的库。
您需要以不同的方式解决具体的功能需求。如果您想动态添加 JSF 组件,那么您应该通过 JSF 本身来完成,而不是通过 JavaScript。这是一个显示多种方法之一的答案:如何动态添加 JSF 组件。但是,如果您坚持为此使用 jQuery,那么您应该自己指定 JSF 组件的 HTML 输出,但您基本上仍然完全错过了 JSF 的意义。然后仔细阅读下面的链接。
你不能使用"$('<p:outputLabel value='Testing'/>')"
. 因为它是 PrimeFaces 标签库。'<label class="my-class ui-outputlabel ui-widget" id="j_idt19:j_idt22">Testing</label>'
它会在页面呈现时生成 html 标签(例如:)。所以你应该使用 jquery 作为 html 标签。例如如下:
<p:outputLabel value='Testing' styleClass='my-class'/>"
var a = $(document.getElementById("panelForm:tableId01"));
$("label.my-class").appendTo(a);