如何使用jQueryselectJSF组件?

我正试图用PrimeFaces和JSF组件来实现jQuery,但是它不能正常工作。 当我试图做与HTML标签一样的工作正常。

这里是HTML代码与jQuery正常工作的代码:

<input type="checkbox" id="check2"></input> <h:outputText value="Check the box, if your permanent address is as same as current address."></h:outputText> <h:message for="checkbox" style="color:red" /> 

 $("#check2").change(function() { if ($("#check2").is(":checked")) { $("#p2").hide(); } else { $("#p2").show(); } }); 

下面是PrimeFaces / JSF的代码,它不能用jQuery正常工作:

 <p:selectManyCheckbox > <f:selectItem itemLabel="1" value="one" id="rad" ></f:selectItem> </p:selectManyCheckbox> 

 $("#rad").change(function() { if ($("#rad:checked").val() == "one") { $("#p2").hide(); } else { $("#p2").show(); } }); 

你应该认识到,jQuery与客户端的HTML DOM树一起工作。 jQuery不像JSF源代码中那样直接在JSF组件上工作,但jQuery直接与由这些JSF组件生成的HTML DOM树一起工作。 您需要在网页浏览器中打开该页面,然后右键单击然后查看源代码 。 您将看到,JSF将生成的HTMLinput元素的ID与所有父NamingContainer组件的ID(例如<h:form><h:dataTable>等)一起预先设置为默认分隔符。 所以例如

 <h:form id="foo"> <p:selectManyCheckbox id="bar" /> ... 

将以生成的HTML结尾

 <form id="foo" name="foo"> <input type="checkbox" id="foo:bar" name="foo:bar" /> ... 

您需要按照该ID来select元素。 不过: CSS标识符中的特殊字符代表伪select器。 要使用jQuery中的CSSselect器在ID中select一个元素,您需要通过反斜杠或使用[id=...]属性select器或使用旧的getElementById()来转义它:

 var $element1 = $("#foo\\:bar"); // or var $element2 = $("[id='foo:bar']"); // or var $element3 = $(document.getElementById("foo:bar")); 

如果在ID中看到自动生成的j_idXXX部分,其中XXX表示增量编号,则必须给予特定组件一个固定的ID,因为增量编号是dynamic的,并且会根据组件在树中的物理位置而发生变化。


作为一种select,您也可以使用类名称:

 <x:someInputComponent styleClass="someClassName" /> 

它以HTML结尾

 <input type="..." class="someClassName" /> 

这样你就可以得到它

 var $elements = $(".someClassName"); 

这允许更好的抽象和可重用性。 这些元素当然不是独一无二的 。 只有标题,菜单,内容和页脚等主要布局元素才是唯一的,但它们通常不在NamingContainer


作为另一种select,您可以将HTML DOM元素本身传递给函数:

 <x:someComponent onclick="someFunction(this)" /> 
 function someFunction(element) { var $element = $(element); // ... } 

也可以看看:

  • 我怎样才能知道一个JSF组件的ID,所以我可以在Javascript中使用
  • 如何在CSSselect器中使用带有冒号“:”的JSF生成的HTML元素ID?
  • 默认情况下,JSF生成不可用的ID,这与Web标准的CSS部分不兼容
  • 在JSF复合组件中集成JavaScript,干净的方式

你也可以使用jQuery“Attribute Contains Selector”(这里是url http://api.jquery.com/attribute-contains-selector/

例如,如果你有一个

  <p:spinner id="quantity" value="#{toBuyBean.quantityToAdd}" min="0"/> 

而你想对它的对象做些什么,你可以select它

 jQuery('input[id*="quantity"]') 

如果你想打印它的价值,你可以做到这一点

 alert(jQuery('input[id*="quantity"]').val()); 

为了知道元素的真正的html标签,你可以使用萤火虫或开发人员工具或查看源代码,始终查看真正的html元素(在这种情况下,微调被翻译成input)…

丹尼尔。

如果你使用RichFaces你可以检查rich:jQuery组件。 它允许你指定jQuery组件的服务器端id。 例如,你有组件的指定服务器ID,那么你可以应用任何jQuery相关的东西在下一个方法: <rich:jQuery selector="#<server-side-component-id>" query="find('.some-child').removeProp('style')"/>

欲了解更多信息,请检查doumentation 。

希望它有帮助。

在这里输入图像描述 看,这将帮助你,当我select经验=是的我的对话框,其中id是dlg3是popup.and如果值是否将不会打开