簡體   English   中英

如何使用commandButton在JSF中的頁面之間導航?

[英]How to navigate between pages in JSF using commandButton?

我有一個使用JSF顯示的字符串列表(在我的情況下是項目的名稱),每個字符串都有一個在JSF中創建的相應“視圖”按鈕。 當用戶按下查看按鈕時,我想導航到一個新頁面,該頁面顯示了有關項目的描述。 這是通過將project_id通過如下所示的方法來實現的。 我知道如何通過基於返回的字符串進行導航(即返回“成功”),使用faces-config在JSF頁面之間進行導航。 我遇到的問題是我正在調用的方法已經在其返回類型中顯示了一個字符串(動態的)。 由於我的方法已經顯示了一個字符串,因此如何使用JSF進行配置,以便導航至相應的頁面。 下面的代碼更清楚地顯示了問題。

xhtml文件:

        <tr>
            <td><H2>Past Projects</H2>
            <h:dataTable value="#{projectBean.projectList}" var="p" border="1">

                <h:column>
                <f:facet name="header">
                Project Name
                </f:facet>
                #{p.projectName}
                <h:commandButton id="viewProject" action="#{projectBean.displayProjectDetails(p.project_id)}" value="View">
               </h:commandButton>
                </h:column>
            </h:dataTable>

            </td>
        </tr>

Java類:

public String displayProjectDetails(int id) {
    factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
    EntityManager em = factory.createEntityManager();   

        em.getTransaction().begin();

        Query myQuery = em.createQuery("SELECT p FROM Projects p WHERE p.project_id=:projectId");
        myQuery.setParameter("projectId", id);
        List<Projects> currentProject=myQuery.getResultList();

        em.getTransaction().commit();
        em.close();

        String projectName=currentProject.get(0).getProjectName();
        String projectDescription=currentProject.get(0).getProjectDescription();

        String output=(projectName+"<br/>"+projectDescription+"<br/>");

        return output;

    } 

XML檔案:

//Faces file
 <navigation-case>
    <from-outcome>output</from-outcome>
    <to-view-id>/projectDescription.xhtml</to-view-id>
 </navigation-case>

對我來說,這似乎是一些錯誤的設計。 您應該使用一種操作方法,該方法適當地返回導航用例字符串(如果要保留在頁面上,則為空)。 該方法不應返回任何其他內容。 另一個字符串應根據需要從getter返回。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM