2012-07-18 2 views
0

서블릿 생성 컨텐츠를 ui : include를 사용하여 Facelet에 포함시키고 싶습니다. 지금까지 나는 단지 오류가 있습니다.서블릿에서 생성 된 서블릿 생성 콘텐츠

서블릿이 잘 작동한다는 점에 유의하십시오. 브라우저의 GET 요청은 정상입니다.

다른 facelet 파일의 컨텐트를 성공적으로 포함 할 수 있지만 컨텐트가 서블릿으로 생성 된 경우는 포함 할 수 없습니다.

Google 검색 및 stackoverflowed 내 문제는 있지만 일치하는 응답을 찾을 수 없습니다.

myfacelet.xhtml는 (웹 애플리케이션의 루트, 즉 도달에 "http : // localhost를 : 8080/mywebapp와/myfacelet.xhtml") :

<?xml version="1.0" encoding="UTF-8"?> 
<!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" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:ui="http://java.sun.com/jsf/facelets"> 
<h:head> 
    <title>JSF Dynamic Content</title> 
</h:head><h:body> 
    <h3>Dynamic content:</h3> 
    <ui:include src="dynamic-content"/> 
</h:body> 
</html> 

MyServlet.java을 (도달 할 수 "통해 http : // localhost : 8080/mywebapp와/동적 컨텐츠") :

@WebServlet(name = "DynamicContentServlet", urlPatterns = {"/dynamic-content"}) 
public class DynamicContentServlet extends HttpServlet { 
    @Override 
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    PrintWriter writer = response.getWriter(); 
    writer.println("<p>Dynamic stuff</p>"); 
    } 
} 

의 web.xml (JSF 관련 물건 만 해당) :

<context-param> 
    <param-name>javax.faces.PROJECT_STAGE</param-name> 
    <param-value>Development</param-value> 
</context-param> 
<servlet> 
    <servlet-name>FacesServlet</servlet-name> 
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>FacesServlet</servlet-name> 
    <url-pattern>/faces/*</url-pattern> 
    <url-pattern>*.jsf</url-pattern> 
    <url-pattern>*.faces</url-pattern> 
    <url-pattern>*.xhtml</url-pattern> 
</servlet-mapping> 

ui의 경우 : include = "/ dynamic-content"및 urlPatterns = "/ dynamic-content" (또는 ui : include = "/ mywebapp/dynamic-content"및 urlPatterns = "/ dynamic-content") 오류는 다음과 같습니다. UI의

javax.faces.view.facelets.TagAttributeException: /myfacelet.xhtml @12,48 <ui:include src="/dynamic-content"> Invalid path : /dynamic-content 
at com.sun.faces.facelets.tag.ui.IncludeHandler.apply(IncludeHandler.java:152) 
at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:98) 
at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137) 
at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:195) 
at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120) 
at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:98) 
at com.sun.faces.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:93) 
at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:98) 
at com.sun.faces.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:86) 
at com.sun.faces.facelets.impl.DefaultFacelet.apply(DefaultFacelet.java:152) 
at com.sun.faces.application.view.FaceletViewHandlingStrategy.buildView(FaceletViewHandlingStrategy.java:774) 
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:100) 
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) 
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594) 
(...) 
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671) 
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930) 
at java.lang.Thread.run(Thread.java:662) 

은 = "동적 콘텐츠"와 urlPatterns의 = "/ 동적 콘텐츠" 또는 인터페이스를 포함한다 : = "동적 content.bla"및 urlPatterns = ". * BLA" 포함 오류 :

java.io.FileNotFoundException 
at org.apache.naming.resources.DirContextURLConnection.getInputStream(DirContextURLConnection.java:369) 
at com.sun.faces.facelets.impl.DefaultFaceletCache._getLastModified(DefaultFaceletCache.java:172) 
at com.sun.faces.facelets.impl.DefaultFaceletCache.access$000(DefaultFaceletCache.java:62) 
at com.sun.faces.facelets.impl.DefaultFaceletCache$1.newInstance(DefaultFaceletCache.java:82) 
at com.sun.faces.facelets.impl.DefaultFaceletCache$1.newInstance(DefaultFaceletCache.java:78) 
at com.sun.faces.util.ExpiringConcurrentCache$1.call(ExpiringConcurrentCache.java:99) 
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) 
at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
at com.sun.faces.util.ExpiringConcurrentCache.get(ExpiringConcurrentCache.java:114) 
at com.sun.faces.facelets.impl.DefaultFaceletCache.getFacelet(DefaultFaceletCache.java:121) 
at com.sun.faces.facelets.impl.DefaultFaceletCache.getFacelet(DefaultFaceletCache.java:62) 
at com.sun.faces.facelets.impl.DefaultFaceletFactory.getFacelet(DefaultFaceletFactory.java:256) 
at com.sun.faces.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:366) 
at com.sun.faces.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:346) 
at com.sun.faces.facelets.impl.DefaultFaceletContext.includeFacelet(DefaultFaceletContext.java:199) 
at com.sun.faces.facelets.tag.ui.IncludeHandler.apply(IncludeHandler.java:147) 
at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:98) 
at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137) 
at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:195) 
at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120) 
at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:98) 
at com.sun.faces.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:93) 
at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:98) 
at com.sun.faces.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:86) 
at com.sun.faces.facelets.impl.DefaultFacelet.apply(DefaultFacelet.java:152) 
at com.sun.faces.application.view.FaceletViewHandlingStrategy.buildView(FaceletViewHandlingStrategy.java:774) 
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:100) 
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) 
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594) 
(...) 
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671) 
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930) 
at java.lang.Thread.run(Thread.java:662) 

또한 서블릿은 실행되지 않습니다.

내 코드에 어떤 문제가 있습니까?

포함이 가능합니까?

어떻게하면됩니까?

안부

답변

1

<ui:include>는 다른 Facelets의 파일, JSP/서블릿이 아닌 출력을 포함 할 수 있습니다.

서블릿을 완전한 Facelets 파일로 대체하거나 Facelets 태그 파일 또는 Facelets 복합 구성 요소 (즉, JSTL 태그 또는 rendered 속성을 사용하여 동적으로 HTML을 생성 할 수 있음)을 사용해야합니다. 백킹 빈 또는 백킹 구성 요소의 도움.

예를 들어, 기존 JSP/Servlet에서 JSF/Facelets 로의 마이그레이션 프로세스에있어 Servlet을 사용해야하는 경우와 Servlet으로 올바르게 변환 할 시간이 많이 남아 있지 않은 경우와 같이,

<o:resourceInclude path="/dynamic-content" /> 

을하지만 말했듯이, 이것이 바로 설계 방식되지 않습니다 : 제정신이 Facelets의 접근 방식에, 당신은 또한 OmniFaces<o:resourceInclude> 구성 요소를 사용 고려할 수 있습니다. 적절한 장기 솔루션을 얻으려면 서블릿을 Facelets 파일/태그/복합체로 대체해야합니다.

+0

답변 해 주셔서 감사합니다. 적절한 디자인 정보를 얻기 위해 헌신적 인 질문을 할 수 있습니다. 지금은 "include servlet generated content"문제에 중점을 둡니다. :)이 "ui : include"제한에 대한 기술 정보를 찾을 수 없습니다. 나는 그것이 가능하다는 진술서를 발견했다. :/제한 사항에 대한 출처/설명/사양이 있습니까? –

+0

태그 설명서를 확인하십시오. http://docs.oracle.com/javaee/6/javaserverfaces/2.1/docs/vdldocs/facelets/ui/include.html – BalusC

+0

이것이 제가 언급 한 소스 중 하나입니다. 이 문서에서 나는 facelet뿐만 아니라 모든 XHTML 파일이 포함될 수 있음을 이해합니다. : '( –

0

은 나도 포함 된 이미지, <map><area> 태그 및 롤오버에 하이라이트 관련 <div> 태그를 포함하여 동적 페이지 생성을 수행해야하는 응용 프로그램을 개발하고있다.

나의 순진한 첫 번째 테스트 접근법은 StringBuffer에서 전체 HTML을 그냥 쓰는 것이 었습니다 : response.getWriter().println(sb.toString());. 이것은 효과적이지만 해킹이며 JSF 템플릿을 활용하지 않습니다. 전체 <ui:composition> 요소를 작성하더라도 템플릿을 사용하지 않습니다.

Java EE 6 자습서에는 사용자 지정 구성 요소를 만드는 방법에 대한 자세한 정보가 있습니다. 여기를 참조하십시오 : http://docs.oracle.com/javaee/6/tutorial/doc/glpcb.html

이 위 BalusC의 코멘트를 지원하는 것, 을 "... 필요한 경우 Facelets의 태그 파일이나 HTML도 JSTL 태그 또는 렌더링 속성을 사용하여 동적으로 생성 될 수있는 Facelets의 복합 구성 요소를 사용 백킹 빈 (backing bean) 또는 백킹 (backing) 컴포넌트의 도움을 받아야합니다. "

귀하의 마일리지는 다를 수 있습니다!

관련 문제