Jsf 从h:selectOneListbox中的f:selectItems传递参数

Jsf 从h:selectOneListbox中的f:selectItems传递参数,jsf,jsf-2,facelets,Jsf,Jsf 2,Facelets,我有一个selectOneListbox,单击它时,应该向服务器传递一个额外的参数id。现在,用户看到一个名称列表,当他们选择一个时,我可以得到名称。但是,每个名称都有一个唯一的id,我不希望用户看到它——如何将所选名称的唯一id传递给支持bean,而用户却看不到它?可能吗?我试图弄清楚如何使用f:param,但我不知道这在这里是如何工作的 <h:selectOneListbox id="listBox" value="#{ScheduleMB.client

我有一个selectOneListbox,单击它时,应该向服务器传递一个额外的参数id。现在,用户看到一个名称列表,当他们选择一个时,我可以得到名称。但是,每个名称都有一个唯一的id,我不希望用户看到它——如何将所选名称的唯一id传递给支持bean,而用户却看不到它?可能吗?我试图弄清楚如何使用f:param,但我不知道这在这里是如何工作的

                <h:selectOneListbox id="listBox" value="#{ScheduleMB.clients}" size="5"  
                rendered="#{ScheduleMB.showClients}" >
                    <f:selectItems value="#{ScheduleMB.clientList}" var="c"
                        itemLabel="#{c.lastName} #{', '} #{c.firstName}" itemValue="#{c.lastName}" />
                    <f:ajax event="click" listener="#{ScheduleMB.clickListener}"  
                        render="group" />
                </h:selectOneListbox>
这是一个不同的目的。即使有可能,它仍然会在生成的HTML输出中可见。最终用户只需右键单击并查看源代码,然后看到ID被定义为选项值

最好的方法是根据不同的唯一标识符(可能是firstname+lastname的唯一组合)从数据库中检索ID


顺便说一下,我不明白为什么要在输出中隐藏ID。如果您使用它作为选项值,会容易得多,如果您使用转换器,则更容易,这样您就可以将整个{c}作为选项值传递。最终用户不能以任何方式欺骗/更改它。JSF将根据服务器端定义的可用选项列表重新验证提交的值。

是否有任何原因不将值设置为与名称关联的ID?或者你不想让ID出现在页面上的任何地方,甚至隐藏在HTML源代码中吗?可能姓+名不是唯一的,所以我更喜欢ID。我不想看到ID,因为1用户可能会愚弄它2我认为它很难看。因此,我想使用id,但我不确定使用jsf将其发送回的最佳方式。谢谢回复。不幸的是,firstname+lastname可能不是唯一的,因此我想使用与每个客户机关联的数字id,并且位于{c}对象中。我不确定我是否完全理解你答案的最后一部分——我还是一个jsf新手。传递整个{c}对象会很好,但是我如何做到这一点并仍然显示客户机列表呢?您可以使用转换器来实现这一点。另请参见此答案中的示例2:BalusC,似乎就是这样。谢谢。请注意,您仍然可以在生成的HTML输出中看到ID。我不确定这是否是你想要的。如果您的意思是不希望它显示在UI中,但不关心它是否在HTML源代码中,那么请继续,以后,请注意在问题中如何陈述此限制。我不希望ID可见,但如果我没有弄错的话,如果正确使用转换器,我可以通过使用converter来避免这种情况。