selectManyMenu转换器基础知识

时间:2015-07-09 08:50:51

标签: jsf converter selectmanymenu

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

@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}”,当我将鼠标指针放在某个记录项上时,显示了描述。因此,显然组件可以访问所有记录,但其名称未显示。您可以看到屏幕截图: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>

第二个问题是将String转换为Object,我不知道我要做什么 - 是否要调用DB?目前我在尝试时遇到错误,从String获取Object的正确方法是什么(id?)?

我按照http://www.primefaces.org/showcase/ui/input/manyMenu.xhtml的说明,但不确定我做错了什么以及为什么我不能得到至少记录的名字(getAsString非常简单,它应该有效)

是否有人有建议或已经有selectManyMenu的转换器? 如果您需要更多信息,我很乐意给您。

谢谢!

0 个答案:

没有答案