1

私はjsfが初めてです。

私は基本的に4つのjsfファイルを持っています。

1) メニュー.xhtml

<h:html xmlns="http://www.w3.org/1999/xhtml" 
xmlns:c="http://java.sun.com/jsp/jstl/core"
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:p="http://primefaces.org/ui">

 <h:head>

<h:body>

  <p:layout fullPage="true">
   <p:layoutUnit position="north" style="min-width: 300px;" gutter="0">
    <ui:insert name="header">
     <ui:include src="../../layout/header.xhtml" />
    </ui:insert>
   </p:layoutUnit>

   <p:layoutUnit position="center" style="border:none;" gutter="0">
    <p:panel id="content" style="background : transparent; border : 0;">
     <ui:include src="content.xhtml" />
    </p:panel>
   </p:layoutUnit>

   <p:layoutUnit position="west" collapsible="true" gutter="6"  >
   <h:panelGroup id="menu" layout="block">
   <h:form>
    <ul>
     <li><p:commandLink value="goto-include1" action="#{bean.doAction1}" update=":mainContent" ajax="true" /></li>
     <li><p:commandLink value="goto-include2" action="#{bean.doAction2}" update=":mainContent" ajax="true" /></li>
    </ul>
   </h:form>
  </h:panelGroup>
   </p:layoutUnit>

   <p:layoutUnit position="south" style="min-width: 300px;" gutter="0">
    <div id="footer" class="ui-widget ui-widget-header">
     <ui:include src="../../layout/footer.xhtml"></ui:include>
    </div>
   </p:layoutUnit>

  </p:layout>`enter code here`


 </h:body>
</f:view>
</h:html>

Include1.jsp

<ui:composition xmlns="http://www.w3c.org/1999/xhtml"
    xmlns:c="http://java.sun.com/jsp/jstl/core"
    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:p="http://primefaces.org/ui">
        <h:outputText value="Include1"/>
</ui:composition>

Include2.jsp

<ui:composition xmlns="http://www.w3c.org/1999/xhtml"
    xmlns:c="http://java.sun.com/jsp/jstl/core"
    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:p="http://primefaces.org/ui">
        <h:outputText value="Include1"/>
</ui:composition>

Include3.jsp

<ui:composition xmlns="http://www.w3c.org/1999/xhtml"
    xmlns:c="http://java.sun.com/jsp/jstl/core"
    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:p="http://primefaces.org/ui">
        <h:outputText value="Include1"/>
</ui:composition>

Content.jsp

<ui:composition xmlns="http://www.w3c.org/1999/xhtml"
    xmlns:c="http://java.sun.com/jsp/jstl/core"
    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:p="http://primefaces.org/ui">
    <h:panelGroup id="mainContent" layout="block">
        <ui:include src="#{bean.page}.xhtml" />
    </h:panelGroup>
</ui:composition>

私の豆のクラスは次のとおりです

package com.assia.dslo.expresse.gui.component.pe;

import java.io.File;
import java.io.Serializable;

public class Bean implements Serializable {

    private String page = "include3";
    public String getPage() {
        return page;
    }
    public void setPage(String page) {
        this.page = page;
    }
    private static final long serialVersionUID = -802772877129109794L;

    public void doAction1() {
        this.page = "expresse/pe/include1.xhtml";
    }

    public void doAction2() {
        this.page = "include2";
    }
}

意図した動作は、Include1 リンクをクリックすると、中央のフレームに include1.jsf が表示され、Include2 リンクも同様に表示されることです。

ただし、Include1 の絶対パスは機能しません。絶対パスを相対パスに置き換えると、正常に動作します。誰かがなぜこれが起こるのか理解するのを手伝ってもらえますか? これは予想される動作ですか、それとも何か問題がありますか。

ありがとう

4

1 に答える 1

2

絶対パスは、ルートに移動するスラッシュで始まり/ます。パスはスラッシュで始まらない/ため、絶対パスではありません。

それに応じて修正します。交換

this.page = "expresse/pe/include1.xhtml";

this.page = "/expresse/pe/include1.xhtml";

具体的な問題とは関係ありませんが、パブリックに直接アクセスできないと想定されているファイルを/WEB-INFフォルダー内に配置することをお勧めします。そうしないと、エンドユーザーがブラウザのアドレス バーにパスを入力または推測したときに、部分的または壊れたページが表示されます。

this.page = "/WEB-INF/expresse/pe/include1.xhtml";

他のすべてのインクルード ファイルとテンプレート ファイルについても同じことを行います。相対パスを で始まる絶対パスに置き換えることを忘れないでください/WEB-INF

以下も参照してください。

于 2013-02-20T11:49:41.403 に答える