Primefaces tabview установить статическую вкладку по умолчанию - PullRequest
0 голосов
/ 08 июля 2019

Я реализовал динамическую вкладку в компоненте TabView простых лиц.
Теперь вкладка успешно открыта и закрыта без проблем.
Теперь я хочу добавить статическую вкладку по умолчанию в динамический простой вид табуляции. (Первый индекс)
это мой пример кода:

      <p:tabView id="tab-group"
                   style="width: 100%"
                   value="#{webSocketBean.listTargetServers}"
                   var="tab">
            <p:ajax event="tabClose" listener="#{webSocketBean.closeChannel}" skipChildren="false"/>

            <p:tab id="welcome-tab"
                   title="Getting Started"
                   titleStyle="background-color: #1b6bad ; color: white">
                <ui:include src="getting-started.xhtml"/>
            </p:tab>

            <p:tab title="#{tab.ipAddress}"
                   titletip="#{tab.ipAddress} (#{tab.name} #{tab.logPath})"
                   closable="true">
                <p:inputText placeholder="Search" styleClass="log-search-box"/>
                <div class="log-box">
                    <h:outputText id="logOuputText_#{tab.id}" value=""/>
                </div>
            </p:tab>
        </p:tabView>       

это мой боб Java:

@Named
@SessionScoped
public class WebSocketBean implements Serializable {

    private List<TargetServer> listTargetServers;
    private TargetServer selectedTargetServer;

    @PostConstruct
    public void init() {
        listTargetServers = new ArrayList<>();
    }

    public void openChannel() {
        listTargetServers.add(selectedTargetServer);
    }

    public void closeChannel(TabCloseEvent event) {
        selectedTargetServer = (TargetServer) event.getData();
        listTargetServers.remove(selectedTargetServer);
    }

    public List<TargetServer> getListTargetServers() {
        return listTargetServers;
    }

    public void setListTargetServers(List<TargetServer> listTargetServers) {
        this.listTargetServers = listTargetServers;
    }

    public TargetServer getSelectedTargetServer() {
        return selectedTargetServer;
    }

    public void setSelectedTargetServer(TargetServer selectedTargetServer) {
        this.selectedTargetServer = selectedTargetServer;
    }
}

Welcome-Tab не показан в моем примере кода.
Как это можно исправить?

Мое окружение:
OpenLiberty 19.0.0.4
Primefaces 7.0
JSF 2.3

1 Ответ

0 голосов
/ 08 июля 2019

Наконец.
Я исправил свою проблему с помощью простого трюка на JSF.
на самом деле это не очень хорошее решение, но исправил мою проблему.
Я изменил боб на это:

@Named
@SessionScoped
public class WebSocketBean implements Serializable {

    private List<Object> listTargetServers;
    private TargetServer selectedTargetServer;

    @PostConstruct
    public void init() {
        listTargetServers = new ArrayList<>();
        Tab tab = new Tab();
        tab.setText("Getting Started");
        listTargetServers.add(tab);
    }

    public void openChannel() {
        listTargetServers.add(selectedTargetServer);
    }

    public void closeChannel(TabCloseEvent event) {
        selectedTargetServer = (TargetServer) event.getData();
        listTargetServers.remove(selectedTargetServer);
    }

    public List<Object> getListTargetServers() {
        return listTargetServers;
    }

    public void setListTargetServers(List<Object> listTargetServers) {
        this.listTargetServers = listTargetServers;
    }

    public TargetServer getSelectedTargetServer() {
        return selectedTargetServer;
    }

    public void setSelectedTargetServer(TargetServer selectedTargetServer) {
        this.selectedTargetServer = selectedTargetServer;
    }
}   

И изменил xhtml на это:

       <p:tabView id="tab-group"
                   style="width: 100%"
                   value="#{webSocketBean.listTargetServers}"
                   var="tab">
            <p:ajax event="tabClose" listener="#{webSocketBean.closeChannel}" skipChildren="false"/>

            <c:set var="tabType" value="#{tab['class'].simpleName}"/>
            <p:tab title="#{tabType eq 'TargetServer' ? tab.ipAddress : tab.text}"
                   titletip="#{tabType eq 'TargetServer' ?  tab.ipAddress.concat(' (').concat(tab.name).concat(')'): null}"
                   titleStyle="#{tabType eq 'TargetServer' ? '' : 'background-color: #1b6bad ; color: white'}"
                   closable="#{tabType eq 'TargetServer' ? 'true' : 'false'}">
                <h:panelGroup layout="block" styleClass="log-box" rendered="#{tabType eq 'TargetServer'}">
                    <p:inputText placeholder="Search" styleClass="log-search-box"/>
                    <div class="logOutputText">
                        <h:outputText value=""/>
                    </div>
                </h:panelGroup>
                <h:panelGroup layout="block" styleClass="log-box" rendered="#{tabType eq 'Tab'}">
                    <ui:include src="getting-started.xhtml"/>
                </h:panelGroup>
            </p:tab>

        </p:tabView>    

немного сложное кодирование, но это простая идея для решения моей проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...