Я пытаюсь ввести Facelet в часть моей главной страницы программным путем, используя FaceletContext#includeFacelet()
(я не могу использовать <ui:include>
) и после прочтения ответа к this question, я написал следующий код (это простой тест):Включая Facelet с FaceletContext # includeFacelet() не работает в JSF 2.0
мнение, index.xhtml
:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Insert title here</title>
<script src="JS/jquery-1.8.3.js" />
<script type="text/javascript">
$(function(){
$('#mondiv').click(function(){
console.log("mondiv is clicked !");
includefacelet();
});
});
</script>
</h:head>
<body>
<h:form id="form1">
<div id="mondiv" style="background-color: red; position: absolute; width: 20px; height: 20px;" />
<p:remoteCommand name="includefacelet" actionListener="#{bean.includefacelet}" />
<br /><br />
<h:panelGroup id="pg" layout="block" style="background- color:blue;position:absolute;width:200px;height:200px;" />
</h:form>
</body>
</html>
Управляемая боб:
package beans.a4jTests;
import java.io.IOException;
import javax.faces.application.Application;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.component.UIComponent;
import javax.faces.component.UIForm;
import javax.faces.component.html.HtmlPanelGroup;
import javax.faces.context.FacesContext;
import javax.faces.view.facelets.FaceletContext;
import org.primefaces.context.RequestContext;
@ManagedBean
@SessionScoped
public class Bean {
public void includefacelet(){
FacesContext fc = FacesContext.getCurrentInstance();
UIForm form1 = (UIForm) fc.getViewRoot().findComponent("form1");
HtmlPanelGroup pg = (HtmlPanelGroup) form1.findComponent("pg");
FaceletContext faceletContext = (FaceletContext) fc.getAttributes().get(FaceletContext.FACELET_CONTEXT_KEY);
try {
faceletContext.includeFacelet(pg, "NewFile.html");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//Refrsh
RequestContext context = RequestContext.getCurrentInstance();
context.update("form1");
context.update("pg");
System.out.println("includefacelet is executed");
}
}
включаемые, newfile.html
:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Insert title here</title>
</head>
<body>
Hello ! this is the newfile.html
</body>
</html>
Я не знаю, почему, не только ничего не происходит, даже метод компонента был выполнен, но и методы компоненты кажется остановка будет выполняться для второго щелчка, и я не сделал получить какое-либо исключение в течение всего исполнения.
HTML! = Facelet – BalusC
@BalusC: После прочтения некоторых документов у меня возникла путаница в отношении смысла Facelets: следует ли только добавить структуру шаблонов Facelets на моей странице? (a используется для самостоятельной работы без использования всей структуры шаблонов, хотя ..) или мне нужно настроить все мое приложение, добавив javax.faces.DEFAULT_SUFFIX в web.xml, com .sun.facelets.FaceletViewHandler view-handler> в face-config.xml и добавление jsf-facelets.jar в библиотеку? Какое оптимальное решение сделать, в том числе и facelets, работает? –
Bardelman