当前位置: 首页 > 知识库问答 >
问题:

JSF 2.0导航无法正常工作

蓬森
2023-03-14

我正在尝试开始使用JSF2.0。我正在尝试一个基本的导航示例,但它不能正常工作。

文件结构如下:

我已经在web.xml中配置了映射:

<!-- Change to "Production" when you are ready to deploy -->
<context-param>
    <param-name>javax.faces.PROJECT_STAGE</param-name>
    <param-value>Development</param-value>
</context-param>

<!-- Welcome page -->
<welcome-file-list>
    <welcome-file>index.xhtml</welcome-file>
</welcome-file-list>

<!-- JSF mapping -->
<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
<!-- Configuration of navigation rules -->  
<navigation-rule>
    <from-view-id>/index.xhtml</from-view-id> 
    <navigation-case>
        <from-outcome>success</from-outcome>
        <to-view-id>/pages/success.xhtml</to-view-id>
    </navigation-case>
     <navigation-case>
        <from-outcome>error</from-outcome>
        <to-view-id>/pages/error.xhtml</to-view-id>
    </navigation-case>
</navigation-rule>
<p:commandButton id="addUser" value="Add" action="#{userMB.addUser}" ajax="false"/>

我相信我搞砸了映射或相对路径。我发现了一些建议,认为唯一的映射应该是带有*.xhtml的映射,但我并不真正理解为什么以及如何处理页面的多个子文件夹。

如有任何帮助,不胜感激,谢谢

共有1个答案

翟青青
2023-03-14

页面切换到success.xhtml,因为我看到内容已经更改,但浏览器URL指向index.xhtml。

这是正常行为。HTML

指向 /index.xhtml,因此表单将提交给该URL,但在幕后,响应显示的是 /pages/success.xhtml的内容。

如果您想要更改URL,那么您需要执行重定向。您可以通过将 添加到有问题的 中来实现这一点。

<navigation-case>
    <from-outcome>success</from-outcome>
    <to-view-id>/pages/success.xhtml</to-view-id>
    <redirect/>
</navigation-case>
    null
public String addUser() {
    if (...) {
        return "/pages/success.xhtml?faces-redirect=true";
    } else {
        return "/pages/error.xhtml?faces-redirect=true";
    }
}

但是,我建议只添加faces消息,然后通过返回voidnull重新显示相同的页面,而不是导航到“success”或“error”页面,这也是真正的web表单的工作方式。当然,除非你在做一些“你好世界”。

 类似资料:
  • 我创建了一个简单的演示项目来测试Android Jetpack导航组件的默认后台功能<我有一个主要活动和两个片段。应用程序运行时会显示主片段。主片段有一个按钮。点击导航到另一个片段<但是每当我按下“系统后退”按钮时,我的整个应用程序就完成了,而不是通常的后堆栈行为,我应该看到主片段<感谢您的帮助。提前谢谢 代码如下: main活动。千吨 活动_main。xml(主要活动的布局) HomeFragm

  • 所以我有一个带有日期时间值的输入(从DB获取值),我使用jQuery日期时间选择器来更改日期/时间。 这是我的输入 这是我的Datetimepicker配置: 使用此配置,Datetimepicker将始终从现在开始的日期时间作为默认值。如果我删除选项,我可以在输入中看到数据库中的实际日期/时间。 信息:我在数据库中的日期不是weekend,与现在一样新()。 所以我的问题是,我怎么能使用Date

  • 问题内容: 因此,我的设置无法按我想要的方式工作。因此,每当我运行该程序时,它就会立即从0变为100。我尝试使用,任务,并尝试了,但没有任何尝试。 这是我的程序: @MadProgrammer这是我尝试做一名摆动工作人员并将每个名称写入文档并更新进度栏的尝试。该程序将达到86%左右并停止运行,永远不会创建完成的文档。该程序将创建一个空白文档。这是我首先创建的SwingWorker对象,这是两种方法

  • 问题内容: 我在JLayeredpane上有两个JPanels。其中一个显示pdf,重叠的一个具有透明背景(我使用过setOpaque(false))。现在,我可以将图形添加到透明面板中,这样看来我实际上是在注释pdf。我想要一个橡皮擦工具来删除这些注释。我尝试使用以下代码 其中path是由多条线构成的形状。现在,不是在先前的图形上绘制 透明线 ,而是绘制 黑线 。我要去哪里错了? 问题答案: 请

  • 问题内容: 这看起来有效,但无法正常工作。我希望菜单悬停时’huh’div不透明。我尝试了淡入/淡出效果,但效果很好,但只有一次很奇怪。 问题答案: 不带点使用:

  • 问题内容: 我正在编辑从tesseract ocr获得的一些电子邮件。 这是我的代码: 但是输出不正确。 输入: 输出: 但是,当我在每次替换后将结果分配给新的String时,它都能正常工作。为什么在同一字符串中连续分配不起作用? 问题答案: 您将在Javadoc中的String.replaceAll()中注意到,第一个参数是正则表达式。 句点()和管道()以及花括号()都有特殊的含义。您需要对它