如何抑制 JSF 警告:无法解决结果的导航案例:puh-repair.xhtml
How to supress JSF warning: Could not resolve NavigationCase for outcome: puh-repair.xhtml
我对警告有疑问:Could not resolve NavigationCase for outcome:...
。
com.sun.faces.application.resource.ResourceHandlerImpl logMissingResource
WARNUNG: JSF1064: Resource /common-content.xhtml not resolvable
警告好像没有
影响到我的应用程序,因为我利用带有 Mojarra 2.2.8 和 Primefaces 3.5 的 JSF 2 的隐式导航。我没有定义任何导航案例
在 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
的支持 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;
}
}
此处托管bean的功能是什么return?:
<ui:insert name="content">
<ui:include src="/main-content/#{mainContentController.getContent()}"/>
</ui:insert>
因为根据警告:
警告:JSF1064:资源 /common-content.xhtml 不可解析
您所引用的文件似乎不存在于您指定的位置。如果您发布项目的文件结构也会有所帮助。
我解决了警告,但 运行 变成了真正的问题。
我更改了以下代码片段
<div>
<h:panelGroup id="content" layout="block">
<ui:insert name="content">
<ui:include src="/main-content/#{mainContentController.getContent()}"/>
</ui:insert>
</h:panelGroup>
</div>
我将静态“/main-content”路径添加到属于动态表达式语言语句#{mainContentController.getContent() 的方法"mainContentController.getContent()"
的return 值。
结果是<div>
<h:panelGroup id="content" layout="block">
<ui:insert name="content">
<ui:include src="#{mainContentController.getContent()}"/>
</ui:insert>
</h:panelGroup>
</div>
支持 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)导致完全相同的路径,但容器的行为不同。
我对警告有疑问:Could not resolve NavigationCase for outcome:...
。
com.sun.faces.application.resource.ResourceHandlerImpl logMissingResource
WARNUNG: JSF1064: Resource /common-content.xhtml not resolvable
警告好像没有
影响到我的应用程序,因为我利用带有 Mojarra 2.2.8 和 Primefaces 3.5 的 JSF 2 的隐式导航。我没有定义任何导航案例
在 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
的支持 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;
}
}
此处托管bean的功能是什么return?:
<ui:insert name="content">
<ui:include src="/main-content/#{mainContentController.getContent()}"/>
</ui:insert>
因为根据警告:
警告:JSF1064:资源 /common-content.xhtml 不可解析
您所引用的文件似乎不存在于您指定的位置。如果您发布项目的文件结构也会有所帮助。
我解决了警告,但 运行 变成了真正的问题。
我更改了以下代码片段
<div>
<h:panelGroup id="content" layout="block">
<ui:insert name="content">
<ui:include src="/main-content/#{mainContentController.getContent()}"/>
</ui:insert>
</h:panelGroup>
</div>
我将静态“/main-content”路径添加到属于动态表达式语言语句#{mainContentController.getContent() 的方法"mainContentController.getContent()"
的return 值。
结果是<div>
<h:panelGroup id="content" layout="block">
<ui:insert name="content">
<ui:include src="#{mainContentController.getContent()}"/>
</ui:insert>
</h:panelGroup>
</div>
支持 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)导致完全相同的路径,但容器的行为不同。