JSF學習(一)——基本問題

前段時間學習JSF過於激進,所以遇到好多並不是問題的問題,所以決定重頭開始學習JSF。

買了本《JavaServer Faces 完全參考手冊》鞏固知識(講得很不錯,全面詳細,翻譯的也不錯,比JSF in action 更注重基礎)。使用的環境是Eclipse Jee版 + JBoss tool,用起來感覺比MyEclipse好用多了(佔用資源少,操作反應很快,UI操作很友好,推薦使用)。這些內容來自於以爲業內前輩,他寫的blog很有啓發性,有興趣的同仁可以閱讀一下。地址:http://hi.baidu.com/jsfcn/blog/item/ffbf40fb60875767024f567a.html

現在開始說正題:最好的學習是有個簡單的例子,一步一步的教你如何做。《參考手冊》開篇的例子簡單,不過很基礎,也沒用IDE。照着操作了一遍,代碼當然不成問題,結果一運行就出了問題:

com.sun.facelets.FaceletException: Error Parsing /register.jsp: Error Traced[line: 1] The markup in the document preceding the root element must be well-formed.
    at com.sun.facelets.compiler.SAXCompiler.doCompile(SAXCompiler.java:
234)
    at com.sun.facelets.compiler.Compiler.compile(Compiler.java:
105)
    at com.sun.facelets.impl.DefaultFaceletFactory.createFacelet(DefaultFaceletFactory.java:
197)
    at com.sun.facelets.impl.DefaultFaceletFactory.getFacelet(DefaultFaceletFactory.java:
144)
    at com.sun.facelets.impl.DefaultFaceletFactory.getFacelet(DefaultFaceletFactory.java:
95)
    at com.sun.facelets.FaceletViewHandler.buildView(FaceletViewHandler.java:
502)
    at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:
552)
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:
110)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:
100)
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:
139)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:
266)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:
290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:
206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:
233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:
175)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:
128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:
102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:
109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:
263)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:
844)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:
584)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:
447)
    at java.lang.Thread.run(Thread.java:
595)

之前用MyEclipse哪遇到過這問題啊。看來那句話還真對“IDE工具,會讓高手成倍的提高效率,會讓初手變成白癡”。這會傻了眼,只好慢慢的找解決方法了。

解決辦法是:

通常在JSF文件中是在開頭引入標籤庫的

<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>

也許是我在建環境時弄得有點混亂,加了facelet支持,但是卻不使用.xhtml,而是用基礎的jsp來作例子,所以弄的對jsp文件的檢測比較嚴格,所以需要用namespace的方式來定義taglibs(個人猜測)。

<f:view xmlns:f="http://java.sun.com/jsf/core" 
xmlns:h
="http://java.sun.com/jsf/html" >

    
<head>
        
<title>Main Page</title>
    
</head>

在我的環境裏這樣是可以解決問題的,不知道在其他的環境中如何,不過倒是可以試一下。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章