При использовании dynamic = "true" для p: tabView другие вкладки не открываются, и командная ссылка на 1-й вкладке не вызывается - PullRequest
1 голос
/ 21 декабря 2011

Я использую JSF 2.0 с PrimeFaces 3.0 M3. Когда я устанавливаю dynamic="false" на <p:tabView>, тогда он работает нормально. Но когда я установил true, тогда будет работать только активная вкладка. Другие вкладки не запускаются. На 1-й вкладке у меня есть ссылка на команду в таблице данных, это также не работает.

Ниже мой tabletabview.xhtml:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:p="http://primefaces.prime.com.tr/ui"
    xmlns:ui="http://java.sun.com/jsf/facelets">
    <h:head>
    </h:head>
    <h:body>
        <f:view>
            <h:form>
                <p:growl id="growl" showDetail="true" />
                <p:tabView cache="false"  dynamic="true" activeIndex=0 >
                    <p:ajax event="tabChange" listener="ActivityController.onChange"/>
                    <p:tab title="Search Results 1">
                        <p:dataTable var="dataItem" value="#{ActivityController.dataList}">
                            <p:column>
                                <p:panel style="font-size:12px;width:600px">
                                    <f:facet name="header">
                                        <h:outputText value="#{dataItem.activityname}" />
                                    </f:facet>
                                    <div style="background-color: #DEB887;">
                                        <h:outputText value="Location:" style="color:#FF0000;"></h:outputText>
                                        <h:outputText value="#{dataItem.address}" />
                                        <br></br>
                                    </div>
                                    <div style="background-color: #DEB887;">
                                        <h:outputText value="Start Date:" style="color:#FF0000;"></h:outputText>
                                        <h:outputText value="#{dataItem.startingdate}" />
                                        <br></br>
                                    </div>
                                    <div style="background-color: #DEB887;">
                                        <h:outputText value="Start Date:" style="color:#FF0000;"></h:outputText>
                                        <h:outputText value="#{dataItem.endingdate}" />
                                    </div>
                                    <div style="background-color: #DEB887;">
                                        <h:outputText value="Description:" style="color:#FF0000;"></h:outputText>
                                        <h:outputText value="#{dataItem.description}" />
                                        <br></br>
                                    </div>
                                    <p:commandLink action="#{ActivityController.editDataItem}">
                                        <div style="display: none">
                                            <h:outputText value="#{dataItem.activityname}" />
                                        </div>
                                        <h:outputText value="more....."></h:outputText>
                                        <f:setPropertyActionListener target="#{ActivityController.dataItem}" value="#{dataItem}" />
                                    </p:commandLink>
                                </p:panel>
                            </p:column>
                        </p:dataTable>
                    </p:tab>
                    <p:tab title="Search Results 2">
                        <p:panel style="width:600px;height:600px">
                            <p:schedule id="sche" value="#{searchController.eventModel}"
                                editable="true" draggable="false" resizable="false"
                                widgetVar="myschedule">
                                <p:ajax event="eventSelect"
                                    listener="#{searchController.onEventSelect}" update="red"
                                    process="@this" />
                            </p:schedule>
                        </p:panel>
                    </p:tab>
                    <p:tab id="gmap" title="Search Results 3">
                        <ui:include src="/locationpointers.xhtml"></ui:include>
                    </p:tab>
                </p:tabView>
            </h:form>
        </f:view>
    </h:body>
</html>

Это соответствующая часть моего ActivityController.java

public List<ActivityRegBean> getDataList() {
    return dataList;
}

public void setDataList(List<ActivityRegBean> dataList){
    this.dataList=dataList;
}

private ActivityRegBean dataItem;
private HtmlInputHidden dataItemId = new HtmlInputHidden() ;


public String editDataItem() throws IOException {
    FacesContext context = FacesContext.getCurrentInstance();  
    System.out.println(dataItem.activityname);
    dataItemId.setValue(dataItem.activityid);
    System.out.println(dataItem.activityid);
    retfromtable(dataItem.activityname);
    return "edit"; // Navigation case.
}

public void onChange(TabChangeEvent event) { 
    System.out.println("tab id = " + event.getTab().getId());
}

У ActivityRegBean есть геттер и сеттер.

Как можно без проблем использовать dynamic="true" на <p:tabView>?

1 Ответ

0 голосов
/ 21 декабря 2011

Можете ли вы попробовать это вместо p: ajax

<p:tabView cache="false"  dynamic="true" tabChangeListener="#{ActivityController.onChange}" onTabChangeUpdate="growl">

Я заметил, что вы используете xmlns: p = "http://primefaces.prime.com.tr/ui". Это для простых лиц 2.2 и если вы действительно используете простые лица 3, затем он будет жаловаться на отсутствие библиотеки тегов для этого пространства имен. Для PF3 вы должны использовать xmlns: p = "http://primefaces.org/ui".может быть, вы должны очистить свой рабочий каталог.

...