JSF在目标页面上不起作用

发布于 2024-11-30 11:15:48 字数 6416 浏览 0 评论 0原文

我正在制作一个简单的 JSF 应用程序,它使用模板,这是非常基本的东西,但需要花费很多时间来找到修复程序。 问题是,我有index.jsp,它只是将请求转发到startPage.xhtml。 startPage.xhtml 使用 main.xhtml 进行模板化。到这里一切都好。但 startPage.xhtml 中有一个锚链接,它将控件引导至 expression/expression.html。当我单击该链接时,浏览器不会呈现我的页眉和页脚(main.xhtml 模板的一部分)。 IE 将表达式/表达式.xhtml 视为文件并使用打开/保存对话框将其打开。

Index.jsp

<html>
 <body>
  <jsp:forward page="startPage.jsf" />
 </body>
</html>

main.xhtml

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
        xmlns:h="http://java.sun.com/jsf/html"
        xmlns:f="http://java.sun.com/jsf/core"
        xmlns:ui="http://java.sun.com/jsf/facelets"
        xmlns:a4j="http://richfaces.org/a4j"
        xmlns:rich="http://richfaces.org/rich"
        xmlns:c="http://java.sun.com/jstl/core">
    <head>
    <meta http-equiv="Content-Type" content="text/xhtml; charset=UTF-8" />
    <meta http-equiv="pragma" content="no-cache" />
    <meta http-equiv="cache-control" content="no-cache" />
    <meta http-equiv="expires" content="0" />

<title>X</title>
<link
    href="css/styles.css"
    rel="stylesheet" type="text/css" />

    <style>
        .rich-table-headercell {
            text-align: left;
        }

        .rich-table-cell {
            vertical-align: top;
        }
    </style>
</head>
<body
    style="bgcolor: #FFFFFF; margin-left: 0; margin-right: 0; margin-top: 0; margin-bottom: 20;">
    <!-- Start Header -->
    <h:form id="mainForm">

        <ui:include src="../includes/header.xhtml"/>

        <table width="100%" cellpadding="0" cellspacing="0" border="0">
            <tr>
                <td nowrap="nowrap">
                    <table style="background-repeat: no-repeat; background-color: #E9ECEF; " width="100%" height="20px">
                        <tr>
                            <td nowrap="nowrap"><img
                                src="images/spacer.gif"
                                width="18" height="1" border="0" alt="" />
                            </td>
                            <td class="globalNavGrey" align="right" nowrap="nowrap">
                                <h:outputText value="Help" /> <rich:spacer width="10" />                                
                            </td>
                        </tr>
                    </table>
                </td>
            </tr>
        </table>
    </h:form>
    <!-- main content area -->

    <table align="left">
        <tr>
            <td><img
                src="images/spacer.gif"
                width="5" height="1" border="0" alt="" />
            </td>
            <td style="vertical-align: top;">
                <!-- Body starts -->
                <ui:insert name="body">
                </ui:insert>
                <!-- Body ends -->
            </td>
        </tr>
    </table>
    </body>
</html>

startPage.xhtml

<?xml version="1.0" encoding="windows-1252"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:a4j="http://richfaces.org/a4j"
    xmlns:rich="http://richfaces.org/rich"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/2002/08/xhtml/xhtml1-transitional.xsd"
    template="/includes/main.xhtml">
<style>
    .cellBackground {
        background-color:yellow;
    }
</style>
    <ui:param name="subTitle" value="Understanding Disease Informatics System" />
    <ui:define name="body">
        <div
            style="margin-left: 30px; top: 120px; width: 800px; margin-bottom: 50px;"
            class="mainscreen">
            <br/> <b><font size="+1" color="003366">
X </font> </b><br/> <br/> This page is the entry point for X 
            developers development is organized into these subsystems:

            <p></p>
        <center>
            <table border="1" cellpadding="15" cellspacing="25">
                <tr>
                  <td class="cellBackground" title="Enabled" >
                    <a href="${facesContext.externalContext.requestContextPath}/expression/expression.xhtml" style="font-size:20px;"> Expression Subsystem</a>
                  </td>
                  <td title="Disable" style="font-size:20px;" >Pathways</td>                  
                </tr>                               
            </table>
        </center>
            <hr></hr>
            <font size="+1">
                <a href="contact">Contacts</a>
                <hr></hr>
            </font>
        </div>
    </ui:define>
</ui:composition>

expression.xhtml

<?xml version="1.0" encoding="windows-1252"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:a4j="http://richfaces.org/a4j"
    xmlns:rich="http://richfaces.org/rich"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/2002/08/xhtml/xhtml1-transitional.xsd">

<ui:composition template="main.xhtml">
<ui:param name="subTitle" value="Expression Data" />
    <ui:define name="body">
        Expression page!
    </ui:define>

</ui:composition>
</html>

有什么建议吗?

注意:由于页面上的所有链接都是静态的,所以我没有使用任何托管 bean。

I am making a simple JSF application which is uses templating It's very basic stuff but taking a lot of time to find the fix.
Issue is, I am having index.jsp which just forwards the request to startPage.xhtml. startPage.xhtml uses main.xhtml for templating. Till here everything is ok. But there is a anchor link of startPage.xhtml which leads the control to expression/expression.html. When I click on that link browser is not rendering my header and footer (part of main.xhtml template). IE consider expression/expression.xhtml a file and open it with open/save dialogue.

Index.jsp

<html>
 <body>
  <jsp:forward page="startPage.jsf" />
 </body>
</html>

main.xhtml

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
        xmlns:h="http://java.sun.com/jsf/html"
        xmlns:f="http://java.sun.com/jsf/core"
        xmlns:ui="http://java.sun.com/jsf/facelets"
        xmlns:a4j="http://richfaces.org/a4j"
        xmlns:rich="http://richfaces.org/rich"
        xmlns:c="http://java.sun.com/jstl/core">
    <head>
    <meta http-equiv="Content-Type" content="text/xhtml; charset=UTF-8" />
    <meta http-equiv="pragma" content="no-cache" />
    <meta http-equiv="cache-control" content="no-cache" />
    <meta http-equiv="expires" content="0" />

<title>X</title>
<link
    href="css/styles.css"
    rel="stylesheet" type="text/css" />

    <style>
        .rich-table-headercell {
            text-align: left;
        }

        .rich-table-cell {
            vertical-align: top;
        }
    </style>
</head>
<body
    style="bgcolor: #FFFFFF; margin-left: 0; margin-right: 0; margin-top: 0; margin-bottom: 20;">
    <!-- Start Header -->
    <h:form id="mainForm">

        <ui:include src="../includes/header.xhtml"/>

        <table width="100%" cellpadding="0" cellspacing="0" border="0">
            <tr>
                <td nowrap="nowrap">
                    <table style="background-repeat: no-repeat; background-color: #E9ECEF; " width="100%" height="20px">
                        <tr>
                            <td nowrap="nowrap"><img
                                src="images/spacer.gif"
                                width="18" height="1" border="0" alt="" />
                            </td>
                            <td class="globalNavGrey" align="right" nowrap="nowrap">
                                <h:outputText value="Help" /> <rich:spacer width="10" />                                
                            </td>
                        </tr>
                    </table>
                </td>
            </tr>
        </table>
    </h:form>
    <!-- main content area -->

    <table align="left">
        <tr>
            <td><img
                src="images/spacer.gif"
                width="5" height="1" border="0" alt="" />
            </td>
            <td style="vertical-align: top;">
                <!-- Body starts -->
                <ui:insert name="body">
                </ui:insert>
                <!-- Body ends -->
            </td>
        </tr>
    </table>
    </body>
</html>

startPage.xhtml

<?xml version="1.0" encoding="windows-1252"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:a4j="http://richfaces.org/a4j"
    xmlns:rich="http://richfaces.org/rich"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/2002/08/xhtml/xhtml1-transitional.xsd"
    template="/includes/main.xhtml">
<style>
    .cellBackground {
        background-color:yellow;
    }
</style>
    <ui:param name="subTitle" value="Understanding Disease Informatics System" />
    <ui:define name="body">
        <div
            style="margin-left: 30px; top: 120px; width: 800px; margin-bottom: 50px;"
            class="mainscreen">
            <br/> <b><font size="+1" color="003366">
X </font> </b><br/> <br/> This page is the entry point for X 
            developers development is organized into these subsystems:

            <p></p>
        <center>
            <table border="1" cellpadding="15" cellspacing="25">
                <tr>
                  <td class="cellBackground" title="Enabled" >
                    <a href="${facesContext.externalContext.requestContextPath}/expression/expression.xhtml" style="font-size:20px;"> Expression Subsystem</a>
                  </td>
                  <td title="Disable" style="font-size:20px;" >Pathways</td>                  
                </tr>                               
            </table>
        </center>
            <hr></hr>
            <font size="+1">
                <a href="contact">Contacts</a>
                <hr></hr>
            </font>
        </div>
    </ui:define>
</ui:composition>

expression.xhtml

<?xml version="1.0" encoding="windows-1252"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:a4j="http://richfaces.org/a4j"
    xmlns:rich="http://richfaces.org/rich"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/2002/08/xhtml/xhtml1-transitional.xsd">

<ui:composition template="main.xhtml">
<ui:param name="subTitle" value="Expression Data" />
    <ui:define name="body">
        Expression page!
    </ui:define>

</ui:composition>
</html>

Any suggestions?

NOTE: As all the links on page are static so I am not using any managed bean.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

-黛色若梦 2024-12-07 11:15:48

您的 index.jsp 表明 FacesServlet 位于 web.xml 中,映射到 *.jsf

然而,

表达子系统


您的 startPage.xhtml 具有指向 expression.xhtml 而不是 expression.jsf 的链接。 IE 正在检索原始且未解析的 JSF 源代码,而不是其生成的 HTML。每当 IE 检索 application/xhtml+xml 文件时,它不知道如何处理它,因此它会要求下载它。

您需要修复链接以匹配 web.xmlFacesServlet

<a href="#{request.contextPath}/expression/expression.jsf" style="font-size:20px;"> Expression Subsystem</a>

(请注意,我还简化了上下文路径检索)

或者,您也可以将 FacesServlet 更改为*.xhtml。这样您就可以完全摆脱丑陋的 index.jsp 并将 设置为 startPage.xhtml 并使用 URL /links 始终以 .xhtml 结尾。

<jsp:forward page="startPage.jsf" />

Your index.jsp suggests that the FacesServlet is in web.xml mapped on an <url-pattern> of *.jsf.

However,

<a href="${facesContext.externalContext.requestContextPath}/expression/expression.xhtml" style="font-size:20px;"> Expression Subsystem</a>

your startPage.xhtml has a link to expression.xhtml instead of expression.jsf. IE is retrieving the raw and unparsed JSF source code instead of its generated HTML. Whenever IE retrieves an application/xhtml+xml file, it doesn't know what to do with it, so it asks to download it.

You need to fix the link to match the <url-pattern> of the FacesServlet in web.xml.

<a href="#{request.contextPath}/expression/expression.jsf" style="font-size:20px;"> Expression Subsystem</a>

(note that I also simplified the context path retrieval)

Alternatively, you can also just change the <url-pattern> of the FacesServlet to *.xhtml. This way you can get rid of the ugly index.jsp altogether and set your <welcome-file> to startPage.xhtml and use URLs/links ending in .xhtml all the time.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文