通过jQuery添加JSF标记/组件

通过jQuery添加JSF标记/组件,jquery,jsf,primefaces,Jquery,Jsf,Primefaces,以下是我所做的: var a = $(document.getElementById("panelForm:tableId01")); $("<p:outputLabel value='Testing'/>").appendTo(a); var a=$(document.getElementById(“panelForm:tableId01”); $(“”)。附录(a); 它不显示标签,但如果我这样做,例如,它可以工作: $("<font color='red'>Re

以下是我所做的:

var a = $(document.getElementById("panelForm:tableId01"));
$("<p:outputLabel value='Testing'/>").appendTo(a);
var a=$(document.getElementById(“panelForm:tableId01”);
$(“”)。附录(a);
它不显示标签,但如果我这样做,例如,它可以工作:

$("<font color='red'>Red</font>").appendTo(a);
$(“红色”)。附录(a);
您不能使用
“$(“”)”
。因为它是PrimeFaces标记库。当页面呈现时,它将生成html标记(例如:
“测试”
)。因此,您应该使用jquery作为html标记。例如:

<p:outputLabel value='Testing' styleClass='my-class'/>"

var a = $(document.getElementById("panelForm:tableId01"));
$("label.my-class").appendTo(a);
”
var a=$(document.getElementById(“panelForm:tableId01”);
$(“label.my class”)。附录(a);

您似乎完全忽略了JSF和JavaScript上下文的要点

JSF基本上是一个HTML代码生成器JSF页面并在您喜爱的webbrowser中打开它。右键单击并选择查看源代码。您看到了什么?是的,这是一个完整的HTML代码!如果JSF工作正常,您不应该看到任何JSF标记,原因很简单,webbrowser不理解它们。它只理解HTML

JavaScript是一种客户端语言,在webbrowser中运行,而不是在webserver中运行。作为证据,当您在物理上不同的机器上运行webserver和webbrowser并调用JavaScript
onclick=“alert('peek-a-boo')”
时,您会在webbrowser中看到它,而不是在webserver中。JavaScript可以看到HTML DOM树(通过
document
对象提供的任何内容,例如
document.getElementById(“someId”)
)。JavaScript无法看到负责生成HTML的原始服务器端源代码,更不用说执行它了。对于jQuery,它没有什么不同,原因很简单,它是一个基于JavaScript的库

您需要以不同的方式解决您的具体功能需求。如果您想动态添加JSF组件,那么您应该通过JSF本身而不是通过JavaScript来完成。下面是一个答案,说明了许多方法之一:。但是,如果您坚持使用jQuery来实现这一点,那么您应该自己指定JSF组件的HTML输出,但您基本上仍然完全没有理解JSF的要点

另见:

那么我如何才能获得这些html标记呢?我使用attr()方法为“class”设置了一个值,但它不起作用,因为标记将自动生成html标记。您可以使用FireBug(如果使用Firefox浏览器)来知道PrimeFaces生成的html标记。您可以执行以下操作:“var a=$(document.getElementById(“panelForm:tableId01”);$(“label[id*=myLabel]”。附录(a);我认为不能使用Javascript附加PrimeFaces标记。你应该按照其他方式来做。因为Javascript不理解PrimeFaces标记。你可以通过html标记来做。谢谢。我在这里使用了该方法,但似乎不起作用。这与当前问题中所述的问题不同。是的,我使用了用户的(Ömer Faruk Almalı)方法就是这个问题