Jsf inputText不工作的Primefaces选取列表

Jsf inputText不工作的Primefaces选取列表,jsf,primefaces,Jsf,Primefaces,我正在尝试将inputText字段添加到primefaces选择列表中,但遇到了一些问题 一开始:我不能用正常的左键点击来写文本字段。我必须右键单击才能在文本字段中键入 第二:它似乎没有将textField中的值保存到相应的实体中 我的情况是: <h:form id="pickListForm"> <p:pickList converter="primeFacesPickListConverter" id="pickList" value="#{locodeBa

我正在尝试将inputText字段添加到primefaces选择列表中,但遇到了一些问题

一开始:我不能用正常的左键点击来写文本字段。我必须右键单击才能在文本字段中键入

第二:它似乎没有将textField中的值保存到相应的实体中

我的情况是:

<h:form id="pickListForm">
        <p:pickList converter="primeFacesPickListConverter" id="pickList" value="#{locodeBackingBean.locodes}"
                    var="locode" showCheckbox="true"
                    itemValue="#{locode.id}">
            <f:facet name="sourceCaption">#{msgs['locode.not.infected']}</f:facet>
            <f:facet name="targetCaption">#{msgs['locode.infected']}</f:facet>
            <p:column style="width:70%;">
                <h:outputText value="#{locode.description}"/>
            </p:column>
            <p:column style="width:30%">
                <p:inputText value="#{locode.incubationPeriod}"/>
            </p:column>
        </p:pickList>
        <p:commandButton value="#{msgs.save}" action="#{locodeBackingBean.save()}" update="growl"/>
    </h:form>

#{msgs['locode.not.infected']}
#{msgs['locode.infected']}
我的后盾豆:

@ManagedBean
@ViewScoped
public class LocodeBackingBean implements Serializable {
   private static final long serialVersionUID = 1L;

   @Inject
   private transient LocodeRepositoryBean locodeRepository;

   private DualListModel<Locode> locodes = new DualListModel<>();

   public void save() {
    for (Locode locode : locodes.getTarget()) {
        locode.setInfectedArea(true);
        locodeRepository.save(locode);
    }

    for (Locode locode : locodes.getSource()) {
        locode.setInfectedArea(false);
        locodeRepository.save(locode);
    }
    addFacesMessage("locode.action.saved");
   }

   @PostConstruct
   public void search() {
    List<Locode> source = locodeRepository.findAllNotInfected(locodeSearchCriteria);;
    List<Locode> target locodeRepository.findAllInfected(locodeSearchCriteria);
    locodes.setSource(source);
    locodes.setTarget(target);
   }


   public DualListModel<Locode> getLocodes() {
    return locodes;
   }

   public void setLocodes(DualListModel<Locode> locodes) {
    this.locodes = locodes;
   }
@ManagedBean
@视域
公共类LocodeBackingBean实现可序列化{
私有静态最终长serialVersionUID=1L;
@注入
私有瞬态LocaodeRepositoryBean LocaodeRepository;
私有DualListModel locodes=新的DualListModel();
公共作废保存(){
for(Locode Locode:locodes.getTarget()){
地点代码:setInfectedArea(真);
locodeRepository.save(locode);
}
对于(Locode Locode:locodes.getSource()){
地点代码:setInfectedArea(假);
locodeRepository.save(locode);
}
addFacesMessage(“locode.action.saved”);
}
@施工后
公开无效搜索(){
列表源=locodeRepository.findAllNotInfected(locodeSearchCriteria);;
列出目标LocaodeRepository.findallinInfected(LocaodeSearchCriteria);
locodes.setSource(源);
locodes.setTarget(目标);
}
public DualListModel getLocaodes(){
返回代码;
}
公共无效设置代码(DualListModel设置代码){
this.locodes=locodes;
}
完整地说,我的转换器:

@FacesConverter(value = "primeFacesPickListConverter")
public class PrimeFacesPickListConverter<T extends Domain> implements Converter {

   @Override
   public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
    if (arg1 instanceof PickList) {
        Object dualList = ((PickList) arg1).getValue();
        DualListModel dl = (DualListModel) dualList;
        for (Object o : dl.getSource()) {
            if (equalsById(arg2, o)) return o;
        }

        for (Object o : dl.getTarget()) {
            if (equalsById(arg2, o)) return o;
        }
    }
    throw new PrimeFacesPickListConverterException("Could not match object's id (" + arg2 + ") to any id's in the list.");
   }

   private boolean equalsById(String arg2, Object o) {
    String id = String.valueOf((((T) o)).getId());
    return arg2.equals(id);
   }

   @Override
   public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {
    return String.valueOf(arg2);
   }
@facescoverter(value=“primeFacesPickListConverter”)
公共类PrimeFacesPickListConverter实现转换器{
@凌驾
公共对象getAsObject(FacesContext arg0、UIComponent arg1、字符串arg2){
if(拾取列表的arg1实例){
对象dualList=((PickList)arg1.getValue();
DualListModel dl=(DualListModel)dualList;
对于(对象o:dl.getSource()){
if(equalsById(arg2,o))返回o;
}
for(对象o:dl.getTarget()){
if(equalsById(arg2,o))返回o;
}
}
抛出新的PrimeFacesPickListConverterException(“无法将对象的id(“+arg2+”)与列表中的任何id匹配”);
}
私有布尔equalsById(字符串arg2,对象o){
String id=String.valueOf(((T)o)).getId();
返回arg2.equals(id);
}
@凌驾
公共字符串getAsString(FacesContext arg0、UIComponent arg1、对象arg2){
返回字符串.valueOf(arg2);
}

使用PrimeFaces 5.2通常不打算包含“控件”。因此,它从来没有被设计成这样工作,如果它不工作,那就是很不幸的。重新设计您的ui是唯一要做的事情。

它从来没有打算以这种方式使用。在选择列表中嵌入控件通常不是很常见(至少我从来没见过它。)另见