【问题标题】:How to supress JSF warning: Could not resolve NavigationCase for outcome: puh-repair.xhtml如何抑制 JSF 警告:无法解析导航案例的结果:puh-repair.xhtml
【发布时间】:2016-07-17 09:45:58
【问题描述】:

我对警告有疑问:Could not resolve NavigationCase for outcome:...

com.sun.faces.application.resource.ResourceHandlerImpl logMissingResource
WARNUNG: JSF1064: Resource /common-content.xhtml not resolvable

警告似乎没有任何 影响我的应用程序,因为我利用 JSF 2 和 Mojarra 2.2.8 和 Primefaces 3.5 的隐式导航。我没有定义任何导航案例 在faces-config.xml

有趣的是,导航本身可以正常工作,但警告会添加到 Faces 消息队列中,因此会在请求后显示在任何消息中。

以下代码显示了我的 home.xhtml

<h:body class="page-container">
    <p:growl id="message"></p:growl>

        <div class="page-layout-container">
            <div>   
                <ui:insert name="header">
                    <ui:include src="/template/puh-common-header.xhtml" />
                </ui:insert>            
            </div>
            <div> 
                <ui:insert  name="menu">
                            <ui:include src="/template/puh-menu.xhtml" />
                        </ui:insert>
            </div>
            <div>
                <h:panelGroup id="content" layout="block">
                <ui:insert name="content">
                    <ui:include src="/main-content/#{mainContentController.getContent()}"/>
                </ui:insert>
                </h:panelGroup>
            </div>          
            <div>
                <ui:insert name="footer">
                    <ui:include src="/template/puh-common-footer.xhtml" />
                </ui:insert>
            </div>

        </div>

</h:body>

该页面仅包含适当的组合。我认为这就是问题所在。 结果总是 home.xhtml JSF 警告引用的页面只是组合。

编辑:

mainContentController的backing bean实现:

@Named("mainContentController")
@SessionScoped
public class MainContentController implements Serializable {    

    /**
     * 
     */
    private static final long serialVersionUID = -6818446964735212239L;



    private Logger logger = LogManager.getLogger(MainContentController.class);

    public static String PAGE_HOME = "puh-home.xhtml";

    public static final String CONTENT_ERROR = "puh-error.xhtml";

    public static String CONTENT_COMMON = "puh-common-content.xhtml";

    public static String CONTENT_CONTACT = "puh-contact.xhtml";

    public static String CONTENT_REPAIR = "puh-repair.xhtml";

    public static String CONTENT_IMPRESSUM = "puh-impressum.xhtml";

    private String content = CONTENT_COMMON;

    private void showControllerState() {
        logger.info("Page "+ content + ".");        
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Page "+ content + "."));
    }

    public String homeAction() {
        content = CONTENT_COMMON;               
        showControllerState();
        return content;
    }

    public String serviceAction() {
        content = CONTENT_REPAIR;               
        showControllerState();
        return content;
    }

    public String impressumAction() {
        content = CONTENT_IMPRESSUM;
        showControllerState();
        return content;
    }

    public String contactAction() {
        content = CONTENT_CONTACT;
        FacesContext facesContext = FacesContext.getCurrentInstance();
        String outcome = PAGE_HOME+"?faces-redirect=true"; // Do your thing?

        // Because of Captcha Image   
        facesContext.getApplication().getNavigationHandler().handleNavigation(facesContext, null, outcome); 
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Redirect "+ content + "."));           
        showControllerState();
        return content;
    }


public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

}

【问题讨论】:

    标签: jsf jsf-2


    【解决方案1】:

    这里的托管bean函数返回什么?:

    <ui:insert name="content">
    <ui:include src="/main-content/#{mainContentController.getContent()}"/>
    </ui:insert>
    

    因为根据警告:

    警告:JSF1064:资源 /common-content.xhtml 不可解析

    您所引用的文件似乎不存在于您指定的位置。如果您发布项目的文件结构也会有所帮助。

    【讨论】:

      【解决方案2】:

      我解决了警告,但遇到了真正的问题。

      我改了下面的代码sn -p

      <div>
         <h:panelGroup id="content" layout="block">
           <ui:insert name="content">
             <ui:include src="/main-content/#{mainContentController.getContent()}"/>
           </ui:insert>
        </h:panelGroup>
      </div> 
      

      我在方法"mainContentController.getContent()"的返回值中添加了静态“/main-content”路径,该方法属于动态表达式语言语句#{mainContentController.getContent()。

      结果是<div> <h:panelGroup id="content" layout="block"> <ui:insert name="content"> <ui:include src="#{mainContentController.getContent()}"/> </ui:insert> </h:panelGroup> </div>

      backing bean 看起来像这样

      public class MainContentController implements Serializable {
      
         private Logger logger = LogManager.getLogger(MainContentController.class);
      
         public static String PAGE_HOME = "puh-home.xhtml";
      
         public static String CONTENT_COMMON = "/main-content/puh-common- content.xhtml";
      
         private String content = CONTENT_COMMON; 
      
         public String getContent() {
           return content;
         }
      
         public void setContent(String content) {
           this.content = content;
         }
      
         private void handleNavigation() {
            logger.info("Navigate to page "+  content + ".");             
            FacesContext facesContext = FacesContext.getCurrentInstance();
            String outcome = PAGE_HOME+"?faces-redirect=true";          facesContext.getApplication().getNavigationHandler().handleNavigation(facesContext, null, outcome);           
          }
      
          public String homeAction() {
              content = CONTENT_COMMON;               
      
              handleNavigation();
              return content;
        }
      }
      

      我现在对这种行为没有真正的答案,但我认为 问题与JSF的生命周期有关。

      强调问题。

      有区别

      1. <ui:include src="/main-content/#{mainContentController.getContent()}"/>
      

      2. <ui:include src="#{mainContentController.getContent()}"/>
      

      两个语句(1 和 2)导致完全相同的路径,但容器的行为不同。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-02-01
        • 2013-12-29
        • 2020-06-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多