jsf 链接到使用模板的视图

发布于 2024-12-15 00:12:01 字数 1507 浏览 2 评论 0原文

嗨,这是我的文件夹结构:

-Web Pages
 -WEB-INF
   -template.xhtml
 -gebruiker
   -index.xhtml
 -index.xhtml

现在我尝试从index.html链接到gebruiker/index.xhtml,

我按如下方式执行此操作:

index.xhtml:

<h:form>
    <h:commandButton value="gebruiker" action="#{labelController.gebruiker()}"/> 
</h:form>

bean:

public String gebruiker(){
        return "gebruiker/index";
    }

如果我运行这个,我会得到一个IO.FileNotFoundException,没有任何有用的细节...

我知道问题是因为 gebruiker 文件夹中的 index.xhtml 使用模板,它看起来像这样:

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                template="./WEB-INF/template.xhtml">

    <ui:define name="title">
        Project Label Configurator
    </ui:define>

    <ui:define name="body">
        GEBRUIKER PAGINA
    </ui:define>

</ui:composition>

当我使用纯 xhtml 而不是组合标签时,映射有效。

有人知道为什么吗?

我的 web.xml:

<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>

Hi this is my folder structure:

-Web Pages
 -WEB-INF
   -template.xhtml
 -gebruiker
   -index.xhtml
 -index.xhtml

and now I'm trying to link from index.html to gebruiker/index.xhtml

I do this as follows:

index.xhtml:

<h:form>
    <h:commandButton value="gebruiker" action="#{labelController.gebruiker()}"/> 
</h:form>

bean:

public String gebruiker(){
        return "gebruiker/index";
    }

And if I run this I get a IO.FileNotFoundException without any useful detail...

I know the problem is because the index.xhtml in gebruiker folder uses a template it looks like this:

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                template="./WEB-INF/template.xhtml">

    <ui:define name="title">
        Project Label Configurator
    </ui:define>

    <ui:define name="body">
        GEBRUIKER PAGINA
    </ui:define>

</ui:composition>

When I use plain xhtml instead of composition tags, the mapping works.

Anyone knows why?

my web.xml:

<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>

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

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

发布评论

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

评论(1

尹雨沫 2024-12-22 00:12:01
template="./WEB-INF/template.xhtml"

删除该时期。

template="/WEB-INF/template.xhtml"

否则它会寻找 /gebruiker/WEB-INF/template.xhtml 文件。作为第一个字符的句点代表“从当前文件夹开始”,而作为第一个字符的斜杠代表“从根目录开始”。


与具体问题无关,您似乎正在实现页面到页面的导航。我强烈建议仅使用 GET 请求,而不是 POST 请求。这对搜索引擎优化和用户友好。

<h:link value="gebruiker" outcome="gebruiker/index" />

另请参阅:

template="./WEB-INF/template.xhtml"

Remove that period.

template="/WEB-INF/template.xhtml"

Otherwise it's looking for /gebruiker/WEB-INF/template.xhtml file. The period as 1st character stands for "start at current folder" while the slash as 1st character stands for "start at root".


Unrelated to the concrete problem, you seem to be implementing page-to-page navigation. I strongly recommend to use just GET requests for this, not POST requests. That's more SEO and user friendly.

<h:link value="gebruiker" outcome="gebruiker/index" />

See also:

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