Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 如何使p:SelectOne菜单显示当前值?_Jsf 2_Primefaces - Fatal编程技术网

Jsf 2 如何使p:SelectOne菜单显示当前值?

Jsf 2 如何使p:SelectOne菜单显示当前值?,jsf-2,primefaces,Jsf 2,Primefaces,我可以从中选择项目的类别。默认情况下,该菜单显示所选someBean.selectedParty.categories的第一个条目。但是该项目在someBean.selectedItem.category中已经有一个我想要显示/选择的当前类别。我怎样才能做到这一点 <p:selectOneMenu value="#{someBean.selectedItem.category}" converter="omnifaces.SelectItemsConverter"> <

我可以从中选择项目的类别。默认情况下,该菜单显示所选someBean.selectedParty.categories的第一个条目。但是该项目在someBean.selectedItem.category中已经有一个我想要显示/选择的当前类别。我怎样才能做到这一点

<p:selectOneMenu value="#{someBean.selectedItem.category}" converter="omnifaces.SelectItemsConverter">
    <f:selectItems value="#{someBean.selectedParty.categories}" var="category" itemLabel="#{category.name}"/>   
</p:selectOneMenu>

只要someBean.selectedItem.category的getter返回列表中可用的值,它就会将该值显示为选中值

但也存在一些问题: 1默认值可能应该在bean构造函数中设置

2 bean someBean不能有RequestScope,因为每个HTTP请求,包括Ajax请求,都会创建一个全新的bean实例,所有属性都设置为默认值。如果您的bean是RequestScope,则更改为ViewScope

3当您从someBean到selectedItem到category进行级联时,请注意selectedItem和selectedParty必须通过相同的内容和相同的内存地址保持一致,否则JSF的生命周期将停止。我猜您是在更早地设置所选对象。如果您使用的是AJAX,请尝试使用下拉列表将完整请求发布到新页面,以调试此功能

4为了简化这个过程,您可以尝试将一个类别和多个类别直接移动到someBean中,使页面看起来像

<p:selectOneMenu value="#{someBean.category}" converter="omnifaces.SelectItemsConverter">
    <f:selectItems value="#{someBean.categories}" var="category" itemLabel="#category.name}"/>    
</p:selectOneMenu>

只要someBean.selectedItem.category的getter返回列表中可用的值,它就会将该值显示为选中值

但也存在一些问题: 1默认值可能应该在bean构造函数中设置

2 bean someBean不能有RequestScope,因为每个HTTP请求,包括Ajax请求,都会创建一个全新的bean实例,所有属性都设置为默认值。如果您的bean是RequestScope,则更改为ViewScope

3当您从someBean到selectedItem到category进行级联时,请注意selectedItem和selectedParty必须通过相同的内容和相同的内存地址保持一致,否则JSF的生命周期将停止。我猜您是在更早地设置所选对象。如果您使用的是AJAX,请尝试使用下拉列表将完整请求发布到新页面,以调试此功能

4为了简化这个过程,您可以尝试将一个类别和多个类别直接移动到someBean中,使页面看起来像

<p:selectOneMenu value="#{someBean.category}" converter="omnifaces.SelectItemsConverter">
    <f:selectItems value="#{someBean.categories}" var="category" itemLabel="#category.name}"/>    
</p:selectOneMenu>

您的意思是在页面加载时,someBean.selectedItem.category有一个默认值吗?或者在选择后,当前值未更新?第一个值是正确的:在之前选择了项目,可以显示其所有其他属性。但对于类别,我想在一个下拉菜单中显示当前值,该菜单保存所有可用类别,并允许用户将类别更改为当前类别以外的其他类别。很抱歉,这听起来很直截了当,但我真的不完全清楚您具体遇到了什么问题。到目前为止给出的代码应该明确地将{someBean.selectedItem.category}显示为当前选中的项(如果它是预设的)。SSCCE和用例可能有助于理解您的具体问题。@BalusC感谢您推动我找到解决方案。在创建SSCCE时,我突然想到,在我的设置中,我必须重写hashCode并再次使用equals,因为否则,由于hashcodes不同,所选类别及其列表中的对应类别将无法识别为相同。您的意思是,在页面加载时,someBean.selectedItem.category具有默认值吗?或者在选择后,当前值未更新?第一个值是正确的:在之前选择了项目,可以显示其所有其他属性。但对于类别,我想在一个下拉菜单中显示当前值,该菜单保存所有可用类别,并允许用户将类别更改为当前类别以外的其他类别。很抱歉,这听起来很直截了当,但我真的不完全清楚您具体遇到了什么问题。到目前为止给出的代码应该明确地将{someBean.selectedItem.category}显示为当前选中的项(如果它是预设的)。SSCCE和用例可能有助于理解您的具体问题。@BalusC感谢您推动我找到解决方案。在创建SSCCE时,我突然想到,在我的设置中,我必须重写hashCode并再次使用equals,因为否则,由于hashcodes不同,所选类别及其列表中的对应项将无法识别为相同。谢谢,直到我创建了一个像巴卢斯克在他对我的问题的评论中提出的SSCCE,我才意识到,但我想你列表中的第3点很好地描述了我遇到的问题,也看到了我对我的问题的第二个评论。谢谢你,直到我创建了一个像巴卢斯克在他对我的问题的评论中提出的SSCCE,我才意识到,但我想你的清单中的第3点很好地描述了我遇到的问题,也看到了我对我的问题的第二点评论。