繁体   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