0

这是我的第一篇文章。我正在尝试为我的 primefaces 应用程序制作一个选择列表。我可以看到源部分中列出的值,也可以将源值传递给屏幕中的目标面板。但是在服务器端,tariffListForDestination(绑定到选择列表中的目标面板)仍然是空的。但在屏幕上一切正常。而且当我调试我的应用程序并在 ontransfer 方法中设置断点并将源对象传递给目标时,我在 event.getItems 中看不到任何值(事件传输事件)。

我在下面发送我的代码的相关部分。

谢谢您的回复。

我的 xhtml 代码片段:

        <p:pickList id="pojoPickList" value="#{serviceCopyInsertBean.tariffList}" var="tariff" effect="bounce"
                itemValue="#{tariff}" itemLabel="#{tariff.cpcmOfferName}"    converter="tmp2TariffDescMappingConverter"
                showSourceControls="true" showTargetControls="true" showCheckbox="true"
                showSourceFilter="true" showTargetFilter="true"     filterMatchMode="contains" >

    <f:facet name="sourceCaption">Available</f:facet>
    <f:facet name="targetCaption">Starting</f:facet>

    <p:ajax event="transfer" listener="#{serviceCopyInsertBean.onTransfer}"/>

        <p:column style="width:75%;">
        #{tariff.cpcmOfferName}
    </p:column>

</p:pickList>

我的转换器 Tmp2TariffDescMappingConverter

      import java.util.ArrayList;
      import java.util.List;
      import javax.faces.application.FacesMessage;
      import javax.faces.component.UIComponent;
      import javax.faces.context.FacesContext;
       import javax.faces.convert.Converter;
      import javax.faces.convert.ConverterException;
      import javax.faces.convert.FacesConverter;
      import com.i2i.st.entity.Tmp2TariffDescMapping;

    @FacesConverter("tmp2TariffDescMappingConverter")
    public class Tmp2TariffDescMappingConverter implements Converter {

private static List<Tmp2TariffDescMapping> tmp2TariffDescMappingDB;

static {
    tmp2TariffDescMappingDB = new ArrayList<Tmp2TariffDescMapping>();

}

public Object getAsObject(FacesContext facesContext, UIComponent component, String submittedValue) {
    if (submittedValue.trim().equals("")) {
        return null;
    } else {
        try {
            int number = Integer.parseInt(submittedValue);

            for (Tmp2TariffDescMapping tmp :tmp2TariffDescMappingDB) {
                if (tmp.getCpcmOfferId() == number) {
                    return tmp;
                }
            }

        } catch(NumberFormatException exception) {
            throw new ConverterException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Conversion Error", "Tmp2TariffDescMapping"));
        }
    }

    return null;
}

public String getAsString(FacesContext facesContext, UIComponent component, Object value) {
    if (value == null) {
        return null;
    } else {
        return String.valueOf(((Tmp2TariffDescMapping) value).getCpcmOfferId());
    }
}

}

我的 JSF 豆

         private DualListModel<Tmp2TariffDescMapping> tariffList=new                              DualListModel<Tmp2TariffDescMapping>();
         private List<Tmp2TariffDescMapping> tariffListForSource=new ArrayList<Tmp2TariffDescMapping>();
     private List<Tmp2TariffDescMapping> tariffListForDestination=new ArrayList<Tmp2TariffDescMapping>();

                tariffList=new DualListModel<Tmp2TariffDescMapping>(tariffListForSource, tariffListForDestination);
4

1 回答 1

0

我不明白你为什么要在 getAsObject() 中迭代 tmp2TariffDescMappingDB。你是如何填写这份清单的?

您应该搜索关税列表.getTarget() 和关税列表.getSource() 以查看pickList 的两侧。类似于这个通用的东西:

    public T getAsObject(FacesContext context, UIComponent component, String value) {
    ...
    if (component instanceof PickList) {
        DualListModel<T> dl = (DualListModel) ((PickList) component).getValue();
        for (T t : dl.getTarget()) {
            //search here
        }
       for (T t : dl.getSource()) {
            //maybe here too
        }
     ...
于 2013-05-10T11:07:51.463 回答