面向 Servlet 的导航案例

问题描述 投票:0回答:1

Web 应用程序中有两个页面

page1
page2
。 页面
page1
是基于 .xhtml 文件的 Facelet,
page2
由 servlet 生成。

我们假设

page1.xhtml
看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="jakarta.faces.html"
      xmlns:f="jakarta.faces.core"
      >
    <h:head>
        <title>TODO supply a title</title>
        <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
    </h:head>
    <h:body>
        <h:button outcome="yolo" value="move on"/>
    </h:body>
</html>

为了简单起见,让

page2
从以下 servlet 生成:

package tests;

import jakarta.inject.Inject;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(urlPatterns = "/abc")
public class StorageSrv extends HttpServlet {
    @Inject
    private Storage storage;
    
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        
        resp.getWriter().write("abc");
    }
    
}

我还在

faces-config.xml
中添加了导航规则,如下:

<navigation-rule>
  <from-view-id>
    /flexible.xhtml
  </from-view-id>
  <navigation-case>
    <from-outcome>
      yolo
    </from-outcome>
    <to-view-id>
      /abc
    </to-view-id>
  </navigation-case>
</navigation-rule>

如何从

page1
重定向到
page2
? 目前,导航规则添加了 .xhtml 扩展名,因此通过单击
page1
上的“继续”按钮,我得到 404。

jsf servlets navigation
1个回答
1
投票

显然,只需将 servlet 映射到带有

.xhtml
扩展名的路径即可完成这项工作。

例如:

@WebServlet(urlPatterns = "/abc.xhtml")
© www.soinside.com 2019 - 2024. All rights reserved.