Java 如何使用commandButton在JSF中的页面之间导航?
在本例中,我有一个字符串列表,即使用JSF显示的项目名称,每个字符串都有一个在JSF中创建的相应“视图”按钮。当用户按下view按钮时,我希望导航到一个新页面,该页面显示所讨论项目的描述。这是通过如下所示的方法传递项目id来实现的。我知道如何使用faces-config在JSF页面之间导航,方法是基于ie-return-success返回的字符串进行导航。我遇到的问题是,我正在调用的方法已经在其返回类型中显示了一个动态字符串。由于我的方法已经显示了一个字符串,我如何使用JSF配置它,以便导航到适当的页面。下面的代码更清楚地显示了问题 xhtml文件: Java类: XML文件:Java 如何使用commandButton在JSF中的页面之间导航?,java,jsf,Java,Jsf,在本例中,我有一个字符串列表,即使用JSF显示的项目名称,每个字符串都有一个在JSF中创建的相应“视图”按钮。当用户按下view按钮时,我希望导航到一个新页面,该页面显示所讨论项目的描述。这是通过如下所示的方法传递项目id来实现的。我知道如何使用faces-config在JSF页面之间导航,方法是基于ie-return-success返回的字符串进行导航。我遇到的问题是,我正在调用的方法已经在其返回类型中显示了一个动态字符串。由于我的方法已经显示了一个字符串,我如何使用JSF配置它,以便导航到适
对我来说,这看起来像是某种错误的设计。如果您想留在页面上,您应该使用适当返回导航案例字符串或void的操作方法。该方法不应返回任何其他内容。根据需要,另一个字符串应该从getter返回
<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>
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;
}
//Faces file
<navigation-case>
<from-outcome>output</from-outcome>
<to-view-id>/projectDescription.xhtml</to-view-id>
</navigation-case>