我是JSF的新手,我想使用javascript或jquery获取SelectOneMenu值以进行表单验证。
我尝试过这样的常规方式:
function apasa() {
var a = $("#j_idt68Inner").val();
alert(a);
}
但是它返回null。 这是JSF代码:
<b:column medium-screen="6">
<b:selectOneMenu colMd="2" required="true" labelColMd="2" style="width:200px;margin-top: 30px;" >
<f:selectItem itemLabel="Selecteaza raport" itemValue="" />
<f:selectItem itemLabel="1.Neconcordante D394" itemValue="1" />
<f:selectItem itemLabel="2.Neconcordante D112 REVISAL" itemValue="2" />
</b:selectOneMenu>
</b:column>
此组件为表格。 我想从itemValue中获取数据。
答案 0 :(得分:0)
一般建议:使用JSF时,请不要使用ID。而是使用伪CSS类。
长答案:JSF使用完全限定的ID。好主意啊。它允许您对表中的每一行使用相同的ID。在内部,JSF在这些id的前面添加了一个前缀,但是从表面上看,它对您隐藏了这些前缀。在大多数情况下,这会为Java程序员提供一个美观而简单的API。
如果使用jQuery,则会出现问题。除其他事项外,完全限定的ID至少包含一个冒号。您必须在每个jQuery选择器中都将其转义。另外,您需要知道标准名称。
因此,您要么熟悉ID的构成方式,要么可以。虽然这是一种很好的方法,但是JSF的id方法既简单又聪明! -我不建议那样。通常,使用伪CSS类像这样更容易:
<b:selectOneMenu class="raport-selection" >
<f:selectItem itemLabel="Selecteaza raport" itemValue="" />
<f:selectItem itemLabel="1.Neconcordante D394" itemValue="1" />
<f:selectItem itemLabel="2.Neconcordante D112 REVISAL" itemValue="2" />
</b:selectOneMenu>
现在,您可以使用简单的jQuery选择器访问值:
$(".raport-selection").val();
有两个“ buts”:
如果您在表或<ui:repeat>
外观中多次使用选择框,则伪类方法将失败。在这种情况下,您最终将获得同一输入字段的多个副本,每个副本都具有相同的伪CSS类。
<b:selectOneMenu>
有两种风格。如果激活select2=true
选项,则BootsFaces会生成完全不同的HTML代码。请查看https://select2.org/,以了解如何实现select2
风格。