0

我正在尝试使 selectManyMenu 工作,但我在正确编写转换器时遇到问题。这是我第一次需要编写转换器,所以事情对我来说不是那么清楚。我已经阅读了几个地方,我不应该在转换器中对数据库进行任何调用,但是除了调用 DB 之外,如何在 getAsObject 方法中获取某些 ID 的对象?

@FacesConverter(value = "converterTest")
public class ConverterTest implements Converter {

@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {

    Configuration cfg = new Configuration();
    cfg.configure("hibernate.cfg.xml");
    System.out.println("ID: " + value);

    SessionFactory factory = cfg.buildSessionFactory();

    try {
        Session session = factory.openSession();    
        Equipment e = (Equipment) session.get(Equipment.class, Integer.valueOf(value));
        System.out.println("EQUIPMENT ID : " + e.getId());

        return e;

    } catch(Exception ex) {
        System.out.println("ERROR: " + ex.getMessage());
        return null;
    }

}

@Override
public String getAsString(FacesContext context, UIComponent component, Object object) {

    if(object != null) {
         System.out.println("ID: " + String.valueOf(((Equipment) object).getId())); 

         return String.valueOf(((Equipment) object).getId());
    }
    else {
        return null;
    }

}

}

重要的:

页面加载时,我的 selectManyMenu 充满了记录,但我看不到它的名称,只有复选框和空格,而不是记录名称(设备)。但是,如果我尝试将一些字符放在搜索过滤器中,即使我只看到复选框而不是名称,它也会起作用。我添加了 itemDescription="#{record.name}" ,当我将鼠标指针放在某个记录上时,会显示 itemDescription。因此,显然组件可以访问所有记录,但它的名称没有显示出来。您可以在以下位置查看屏幕截图:http ://i57.tinypic.com/2wpm2ok.png(“Autoklav”是不想出现在列表中的记录名称,但它显示为描述)。这不是css问题,我检查了:)

这是我的 selectManyMenu:

   <p:selectManyMenu id="advanced" value="#{pickListView.recordSet}" converter="converterTest"
                  var="t" filter="true" filterMatchMode="contains" showCheckbox="true">
        <f:selectItems value="#{pickListView.allEquipment}" var="record" itemLabel="#{record.name}" itemValue="#{record}" />

        <p:column style="width:90%">
            <h:outputText value="#{record.name}" />
        </p:column>
    </p:selectManyMenu>

第二个问题是将字符串转换为对象,我不确定我必须做什么 - 是否调用 DB?目前,无论我尝试什么,我都会遇到错误,从 String (id?) 获取 Object 的正确方法是什么?

我按照http://www.primefaces.org/showcase/ui/input/manyMenu.xhtml上的说明进行操作,但不确定我做错了什么以及为什么我至少不能显示记录名称(getAsString 真的很简单,它应该工作)

有没有人有一些建议或已经有 selectManyMenu 的转换器?如果您需要更多信息,我很乐意为您提供。

谢谢!

4

0 回答 0