0

私はピックリストに取り組んでいます ここに私のコードがあります:

xhtml コード:

    <p:pickList id="pickList" value="#{projectAdminisrationMB.selectedUserGroups}" 
          var="group"   
            itemLabel="#{group}" itemValue="#{group.name}" 
            converter="groupConverter"
            > 
             <f:facet name="sourceCaption">Belong To</f:facet>  
             <f:facet name="targetCaption">Exclude From</f:facet> 

              <p:column style="width:25%">  
                    <p:graphicImage value="/images/group/#{group.name}.gif" />  
               </p:column>  

             <p:column style="width:75%;">  
                  #{group.name}  
             </p:column> 
              <p:ajax event="transfer" listener="#
          {projectAdminisrationMB.onTransferGroup}" update="growl" />  
             </p:pickList> 

私のコンバーター:

package tn.talan.testFramework.converter;


 @FacesConverter(value = "groupConverter")
  public class GroupConverter implements Converter {

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


    return administrationProjectFinal.getGroupByName(value);

     Object ret = null;
        if (component instanceof PickList) {
            Object dualList = ((PickList) component).getValue();
            DualListModel dl = (DualListModel) dualList;
            for (Object o : dl.getSource()) {
                String id = "" + ((Group) o).getIdBdd();
                if (value.equals(id)) {
                    ret = o;
                    break;
                }
            }
            if (ret == null)
                for (Object o : dl.getTarget()) {
                    String id = "" + ((Project) o).getIdBdd();
                    if (value.equals(id)) {
                        ret = o;
                        break;
                    }
                }
        }
        return ret;

}

@Override
public String getAsString(FacesContext context, UIComponent component,
        Object value) {
    System.out.println("converter group getAsString  " + value);

     String str = "";
        if (value instanceof Group) {
            str = "" + ((Project) value).getIdBdd();
        }
        return str;


}
  }

私の目的は、選択リストから追加または削除された項目を取得することです。そのため、OnTransferGroup メソッドは次のようになります。

 public void  onTransferGroup(TransferEvent event) { 

     if(event.isAdd()){

         String resMsg;
            System.out.println("dropped group to be excluded");

             for(Object item : event.getItems()) { 

                    Group selectedBelongToGroup =(Group) item;




    resMsg=administrationProjectFinal.exclureUserGroupFn(selectedBelongToGroup 
     ,selectedUserRow);

                    if (resMsg.equals("The project should have at least 
                               one administrator"))
                    {setDeleteGroupFlag(true);
                     showErrorMsg(resMsg);
                    }

                   else droppedBelongToGroups.add(selectedBelongToGroup); 

                }
         }


     else if(event.isRemove()){
         System.out.println("remove");
         System.out.println("dropped group to be included");
         for(Object item : event.getItems()) {  

        Group selectedExcludeFromGroup = ((Group)item); 
        System.err.println(" n" +selectedExcludeFromGroup.getName());
        System.err.println("d "+selectedExcludeFromGroup.getDescription());



       droppedExcludeFromToGroups.add(selectedExcludeFromGroup); 

        administrationProjectFinal.inclureUserGroup(selectedExcludeFromGroup 
        ,selectedUserRow);

         }



     }                   

         }  

問題は、event.getItems() リストが常に空であることです。そして、 onTransferGroup(TransferEvent event) は、アイテムを初めて選択したときにランチされませんが、その後はランチされます。

追加または削除する選択したアイテムを取得する方法

4

1 に答える 1

2

「getAsObject」メソッドの最初のステートメントに「return」を配置して、残りのロジックに到達しないようにします。
また、getItems メソッドから null の戻り値を取得している場合は、Converter の問題であることは間違いないので、上記を確認してください。

于 2012-11-09T17:01:53.617 に答える