首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在ajax更新时动态添加Primefaces调度和调度事件

在ajax更新时动态添加Primefaces调度和调度事件
EN

Stack Overflow用户
提问于 2017-07-01 11:45:07
回答 1查看 664关注 0票数 1

我有一个命令按钮,它接收表单中所需的数据,然后与任何DefaultScheduleEvents一起创建一个DefaultScheduleModel。然后,命令按钮应该通过动态创建新选项卡和新计划以及需要创建的任何事件来更新包含TabView的另一个表单。

问题在于,由于某种奇怪的原因,ajax更新时不会创建新的选项卡以及相应的计划/事件。我得到的唯一一件事是一个带有空时间表的选项卡,其中任何后续提交都不会创建任何额外的选项卡/时间表/事件。

这是我的观点:

代码语言:javascript
运行
复制
<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>

下面是相应的控制器:

代码语言:javascript
运行
复制
//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());
        }

我使用的是Primefaces 6.0和Bootsfaces 1.1.1

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-02 12:57:49

我意识到我的错误在于我一直在更新tabview /日程表,而不是让两个表单和提交命令按钮指向第二个表单id,而是让提交按钮更新tabview本身。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44857143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档