当使用dynamic =" true"在p:tabView上,其他选项卡不会打开,并且不会调用第一个选项卡中的commandlink

时间:2011-12-21 12:14:20

标签: jsf jsf-2 primefaces

我正在使用带有PrimeFaces 3.0 M3的JSF 2.0。当我在dynamic="false"上设置<p:tabView>时,它运行正常。但是当我将其设置为true时,只有当前活动的选项卡有效。其他选项卡不会运行。在第一个选项卡中,我在数据表中有一个命令链接,这也不起作用。

以下是我的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有一个getter和setter。

如何在dynamic="true"上使用<p:tabView>而不会出现问题?

1 个答案:

答案 0 :(得分:-1)

你可以试试这个而不是p:ajax

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

我注意到你正在使用xmlns:p =“http://primefaces.prime.com.tr/ui”。它适用于primefaces 2.2,如果你确实使用了primefaces 3,那么它会抱怨该命名空间没有taglibrary。对于PF3,你应该使用xmlns:p =“http://primefaces.org/ui”。也许你应该清理你的工作目录。