Ich habe eine Befehlsschaltfläche, die die erforderlichen Daten in einem Formular einnimmt und dann ein DefaultScheduleModel zusammen mit allen DefaultScheduleEvents erstellt. Die Befehlsschaltfläche sollte dann ein anderes Formular aktualisieren, das TabView enthält, indem dynamisch eine neue Registerkarte und ein neuer Zeitplan zusammen mit allen Ereignissen erstellt wird, die erstellt werden müssen.Hinzufügen von Primitiven Planen und Planen von Ereignissen dynamisch auf Ajax-Update
Das Problem ist, dass aus irgendeinem Grund die neuen Registerkarten zusammen mit den entsprechenden Zeitplänen/Ereignissen nicht nach Ajax-Update erstellt werden. Das einzige, was ich bekomme, ist ein Tab mit einem leeren Zeitplan, bei dem alle nachfolgenden Übermittlungen keine zusätzlichen Tabs/Zeitpläne/Ereignisse erzeugen.
Hier ist meine Ansicht:
<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>
Und hier ist der jeweilige Controller:
//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());
}
Ich verwende Primefaces 6.0 zusammen mit Bootsfaces 1.1.1
Ich habe versucht, Ihre Code-Schnipsel in mein eigenes Projekt zu kopieren. Leider ist die Bean-Klasse unvollständig und benötigt JodaDateTime. Das macht es anderen schwer, das Problem zu verstehen und Ihnen zu helfen. –