【问题标题】:Primefaces SelectOneMenu with Objects from List flips back on selectionPrimefaces SelectOneMenu 与列表中的对象在选择时翻转
【发布时间】:2012-10-26 22:48:28
【问题描述】:

selectedRestaurant 的 setter 方法被调用,但菜单只是向后翻转并且不呈现 <h:outputText>。菜单有内容,所以<f:selectItems> 中使用的列表不为空。由于我使用的是omnifaces.SelectItemsConverter,我想这不是由于转换问题。

这是我的 JSF 代码:

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.org/ui">
<h:head />
<h:body>
    <h:panelGroup id="adminOneMenu" layout="block">
    <h:form>

    <p:selectOneMenu value="#{bugBean.selectedRestaurant}" converter="omnifaces.SelectItemsConverter">
        <f:selectItem itemValue="" itemLabel="Restaurant wählen"/> 
        <f:selectItems value="#{bugBean.restaurants('London')}" var="restaurant" itemLabel="#{restaurant.screenName}"/>
        <p:ajax update=":adminOneMenu"/>
    </p:selectOneMenu>  

    <h:outputText value="#{bugBean.selectedRestaurant.screenName}" />
    </h:form>
    </h:panelGroup>

</h:body>
</html>

这是支持 bean:

package huhu.main.managebean;

import java.io.Serializable;
import java.util.List;

import javax.ejb.EJB;
import javax.enterprise.context.SessionScoped;
import javax.inject.Named;

import huhu.model.generated.Restaurant;
import huhu.service.RestaurantService;

@Named
@SessionScoped
public class BugBean implements Serializable {

   private static final long serialVersionUID = 1L;
   private Restaurant selectedRestaurant;

   @EJB
   RestaurantService rs;

   public List<Restaurant> getRestaurants(String city){
       List<Restaurant> restaurants;
       restaurants = rs.getRestaurantsInCity(city);
       return restaurants;
   }

   public Restaurant getSelectedRestaurant() {
      return selectedRestaurant;
   }

   public void setSelectedRestaurant(Restaurant selectedRestaurant) {
      this.selectedRestaurant = selectedRestaurant;
   }
}

【问题讨论】:

    标签: jsf-2 primefaces omnifaces


    【解决方案1】:

    如果出现转换错误,您应该会收到一条错误消息。

    你在餐厅类中实现了#equals() 和#hashcode() 吗?

    【讨论】:

    • 没有错误信息,没有#equals() 和#hashcode() 实现。 omnifaces.SelectItemsConverter 不应该是必要的,不是吗?
    • 转换不是必需的,但 selectOneMenu 是必需的。 Primefaces selectOneMenu 检查所选餐厅是否在您的选择项列表中。如果 #equals() 没有实现,这可能不起作用。
    • 它是一个从数据库表生成的实体。我如何在新生成它们时无需手动编辑它们来实现它们?
    • 告诉生成器自动实现它们。例如 Eclipse 就可以做到。
    猜你喜欢
    • 2014-11-12
    • 2014-01-27
    • 2015-03-04
    • 1970-01-01
    • 2014-11-13
    • 2018-04-06
    • 2014-07-05
    • 1970-01-01
    • 2013-11-30
    相关资源
    最近更新 更多