我遇到警告问题: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
的支持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;
}
}
答案 0 :(得分:0)
此处托管bean的功能是什么?:
<ui:insert name="content">
<ui:include src="/main-content/#{mainContentController.getContent()}"/>
</ui:insert>
因为根据警告:
WARNUNG:JSF1064:资源/common-content.xhtml无法解析
您指定的文件似乎不存在于您指定的位置。如果您发布项目的文件结构,它也会有所帮助。
答案 1 :(得分:0)
我解决了警告但遇到了实际问题。
我更改了以下代码段
<div>
<h:panelGroup id="content" layout="block">
<ui:insert name="content">
<ui:include src="/main-content/#{mainContentController.getContent()}"/>
</ui:insert>
</h:panelGroup>
</div>
我添加了静态&#34; / main-content&#34;方法"mainContentController.getContent()"
的返回值的路径,该方法属于动态表达式语言语句#{mainContentController.getContent()。
结果为<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)都产生完全相同的路径,但容器的行为是不同的。