フォームに必要なデータを取り込んで、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
自分のプロジェクトにコードスニペットをコピーしようとしました。残念ながら、Beanクラスは不完全で、JodaDateTimeが必要です。それは他の人が問題を理解し、あなたを助けることを困難にします。 –