【问题标题】:JSF 2.0 Navigation after commandButton命令按钮后的 JSF 2.0 导航
【发布时间】:2012-05-03 19:57:29
【问题描述】:

您好,我正在使用 JSF 2.0 构建网站。

我正在尝试设置一个 commandButton,以便在我按下它后,它会使用一个方法执行一些操作,然后根据该方法返回的内容导航到一个页面。

到目前为止,我一直只使用 JSF 2.0 动作导航,但据我所读,不可能有两个动作,因此您必须使用 faces-config.xml 文件。

我已尝试创建一个并制定导航规则,但无法使其正常工作。认为在我的 web.xml 中声明它可能是一个问题。我试图保留原始参数值,但代码无法编译,因此被注释掉:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<context-param>
    <!--
    <param-name>javax.faces.PROJECT_STAGE</param-name>
    <param-value>Development</param-value>
    -->

    <param-name>javax.faces.CONFIG_FILES</param-name> 
  <param-value>/WEB-INF/faces-config.xml</param-value>

</context-param>
<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<session-config>
    <session-timeout>
        30
    </session-timeout>
</session-config>
<welcome-file-list>
    <welcome-file>faces/index.xhtml</welcome-file>
</welcome-file-list>
</web-app>


<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>

我的 faces-config 文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<faces-config
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
version="2.0">

   <navigation-rule> 
<from-view-id>/tabletsHome.xhtml</from-view-id> 
<navigation-case> 
  <from-outcome>product1</from-outcome> 
  <to-view-id>/inputForm.xhtml</to-view-id> 
</navigation-case> 
<navigation-case> 
  <from-outcome>product2</from-outcome> 
  <to-view-id>/inputForm.xhtml</to-view-id> 
</navigation-case> 

在导航将您带到下一页后,还有一种方法可以根据用户单击的内容将信息传递到该页面。例如产品编号?

提前感谢您提供的任何帮助。

【问题讨论】:

标签: jsf navigation web web.xml faces-config


【解决方案1】:

我不确定web.xml/faces-config.xml 与此有何关联。至于您的上下文参数问题,只需创建另一个&lt;context-param&gt;。但这不会解决你的问题。至于您的导航问题,您可以只使用一个返回不同结果的操作方法。

public String submit() {
    if (...) {
        return "view1";
    }
    else {
        return "view2";
    }
}

【讨论】:

  • 感谢您的快速回复。正如我从这篇文章中了解到的那样:stackoverflow.com/questions/4304132/…,不可能从命令按钮执行多个操作。我想运行一个 javamail 方法,然后让页面导航到另一个页面,我认为这是两个操作,所以即使我使用的是 jsf 2.0,我也需要定义一个 faces-config.xml?
  • 我认为action 这个词在这里是模棱两可的。根据您的问题,我将其解释为 JSF 托管 bean 操作方法。但是您显然将其解释为 HTTP 请求(就像正在处理的其他问题/答案一样)。为什么你需要为这个简单的案例发送 2 个 HTTP 请求?还是这只是你的误解?
  • 之前使用 action=somePage 进行导航后无法添加两个操作命令?如果您必须添加大量导航,编辑两个文件似乎需要做更多的工作。在创建 faces-config.xml 后,我现在可以使用它了。非常感谢。
  • 自 JSF 2.0 起,导航案例配置不再需要 faces 配置文件。返回的结果值现在将被隐式视为&lt;to-view-id&gt;。因此,在您的特定情况下,您可以只使用return "inputForm";。然后它将转到inputForm.xhtml
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-13
  • 2011-07-09
  • 2017-10-04
  • 1970-01-01
  • 2014-04-24
  • 2014-08-29
  • 1970-01-01
相关资源
最近更新 更多