2017-07-01 4 views
1

フォームに必要なデータを取り込んで、DefaultScheduleEventsとともにDefaultScheduleModelを作成するコマンドボタンがあります。コマンドボタンは、作成する必要のあるイベントとともに、新しいタブと新しいスケジュールを動的に作成して、TabViewを含む別のフォームを更新する必要があります。プライムフェイスを追加するajaxアップデートでスケジュールとスケジュールイベントを動的に

問題は、いくつかの奇妙な理由から、それぞれのスケジュール/イベントとともに新しいタブがajaxの更新時に作成されないということです。私が得る唯一のことは、空のスケジュールを持つ1つのタブです。その後のサブミットは、追加のタブ/スケジュール/イベントを作成しません。ここで

が私の見解です:

<h:form> 

     <b:panel id="createSchedule" title="Create Schedule-o-matic" > 

       <f:facet name="append"> 
        <b:commandButton look="danger" value="Delete" ajax="true" actionListener="#{onCallJSFBean.deleteTeamMember(teamMember)}" iconAwesome="times" icon-align="right" 
          update="rosterTable"/> 
       </f:facet> 
       </b:inputText> 
      </h:column> 
      </h:dataTable> 
      <b:commandButton value="Add Team Member" ajax="true" update="createSchedule" actionListener="#{onCallJSFBean.addTeamMember}"/> 
      <f:facet name="footer"> 
      <b:buttonToolbar> 
       <b:buttonGroup> 
       <b:commandButton id='scheduleCancel' look="danger" ajax="true" value="Close" icon-awesome="window-close" update="createSchedule" 
         onclick="ajax:onCallJSFBean.cancelSchedule();" 
         oncomplete="$('#j_id_12\\:createSchedule').hide();"/> 
       <b:commandButton id='scheduleCreate' look="success" ajax="true" value="Submit" icon-awesome="fa-check" 
         actionListener="#{onCallJSFBean.createSchedule()}" update="@(.scheduleClass)" 
         /> 
       </b:buttonGroup> 
      </b:buttonToolbar> 
      </f:facet> 

     </b:panel> 

      </h:form> 
<h:form class="scheduleClass"> 
      <b:row> 
      <p:tabView dynamic="true" value="#{onCallJSFBean.scheduleDOs}" var="scheduleList" scrollable="true"> 
       <p:tab title="#{scheduleList.scheduleTitle}"> 
       <h:outputText value="#{scheduleList.startTime} #{scheduleList.endTime} #{scheduleList.scheduleModel.eventCount}"/> 

       </p:tab> 
      </p:tabView> 
      </b:row> 
     </h:form> 

そしてここでは、それぞれのコントローラです:

//When canceling/closing the schedule creation panel  
public void cancelSchedule(){ 
     this.createScheduleTitle=""; 
     this.createScheduleCycleTime = null; 
     this.slotStartTimePeriod = null; 
     this.slotEndTimePeriod = null; 
     this.createScheduleRoster = new ArrayList<>(); 
     System.err.println(scheduleDOs.size()); 
} 

     public void createSchedule(){ 


     if(submitFail == true){ 
      this.scheduleDOs.add(createScheduleData()); 
      System.err.println(this.scheduleDOs.size()+" Size of tab"); 
     } 

     System.err.println("Finished"); 
     } 

     private ScheduleDO createScheduleData(){ 
     ScheduleModel scheduleModel = new DefaultScheduleModel(); 

     if(createScheduleCycleTime == 1){ 
      populateDailySchedule(scheduleModel); 
     } 

     ScheduleDO onCall = new ScheduleDO(createScheduleTitle, createScheduleCycleTime, 
      slotStartTimePeriod, slotEndTimePeriod, createScheduleRoster, scheduleModel); 

     return onCall; 
     } 

     private int rosterCounter = 0; 
     private String nextTeamMember(List<SimpleStringWrapper> roster){ 
     String tmp; 
     if(rosterCounter >= roster.size()){ 
      rosterCounter=0; 
      tmp = roster.get(rosterCounter).getValue(); 
     }else{ 
      tmp = roster.get(rosterCounter).getValue(); 
     } 
     rosterCounter+=1; 
     return tmp; 
     } 

     private void populateDailySchedule(ScheduleModel scheduleModel){ 
     DateTime startDate = DateTime.now(); 
     Period period = Period.months(6); 
     DateTime endDate = startDate.plus(period); 
     Days day = Days.daysBetween(startDate, endDate); 

     int numDays = day.getDays(); 

     for(int i = 0;i<numDays;i++){ 
      MutableDateTime startTime = new MutableDateTime(startDate.plusDays(i)); 
      startTime.setHourOfDay(this.slotStartTimePeriod); 
      MutableDateTime endTime = new MutableDateTime(startDate.plusDays(i)); 
      endTime.setHourOfDay(this.slotEndTimePeriod); 

      String teamMember = nextTeamMember(createScheduleRoster); 
    //  System.err.println(teamMember+" "+startTime.toDate()+" "+endTime.toDate()); 
      DefaultScheduleEvent event = new DefaultScheduleEvent(teamMember, startTime.toDate(), endTime.toDate()); 
      scheduleModel.addEvent(event); 
     } 
     System.err.println(scheduleModel.getEventCount()); 
     } 

私は、私は私の誤りを実現Bootsfaces 1.1.1

+0

自分のプロジェクトにコードスニペットをコピーしようとしました。残念ながら、Beanクラスは不完全で、JodaDateTimeが必要です。それは他の人が問題を理解し、あなたを助けることを困難にします。 –

答えて

1

とともにPrimefaces 6.0を使用しています私はtabview /スケジュールを更新していたのではなく、2つのフォームと2番目のフォームIDを対象としたsubmitコマンドボタンの代わりに、サブミットボタンを使ってtそれ自体を打破する。

+0

2つのフォームを1つのフォームにまとめるのはなぜですか?本当に両方の変更が必要ですか? –

+0

私が知っていることはありません、私はそれが削除できると思います。 – landocalrissian

関連する問題