精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2005-12-23
web.xml <servlet> <servlet-name>freemarker</servlet-name> <servlet-class>com.opensymphony.webwork.views.freemarker.FreemarkerServlet</servlet-class> <load-on-startup>4</load-on-startup> </servlet> <servlet-mapping> <servlet-name>freemarker</servlet-name> <url-pattern>*.ftl</url-pattern> </servlet-mapping> login.ftl <#assign ww=JspTaglibs["/WEB-INF/webwork.tld"] /> <html> <head> <title>登陆</title> </head> <body> <@ww.form action="login" method="POST"> <@ww.textfield label="用户名" name="login.loginId"/> <@ww.password label="密码" name="login.password"/> <@ww.submit value="登陆"/> </@ww.form> </body> </html> 当WEB服务启动起来之后访问该ftl页面,后台抛异常: xpression JspTaglibs is undefined on line 1, column 13 in test/login.ftl. The problematic instruction: ---------- ==> assignment: ww=JspTaglibs["/WEB-INF/webwork.tld"] [on line 1, column 1 in test/login.ftl] ---------- Java backtrace for programmers: ---------- freemarker.core.InvalidReferenceException: Expression JspTaglibs is undefined on line 1, column 13 in test/login.ftl. at freemarker.core.TemplateObject.assertNonNull(TemplateObject.java:124); at freemarker.core.DynamicKeyName._getAsTemplateModel(DynamicKeyName.java:75); at freemarker.core.Expression.getAsTemplateModel(Expression.java:89); at freemarker.core.Assignment.accept(Assignment.java:90); at freemarker.core.Environment.visit(Environment.java:196); at freemarker.core.MixedContent.accept(MixedContent.java:92); at freemarker.core.Environment.visit(Environment.java:196); at freemarker.core.Environment.process(Environment.java:176); at freemarker.template.Template.process(Template.java:231); at com.opensymphony.webwork.views.freemarker.FreemarkerServlet.process(FreemarkerServlet.java:222); at com.opensymphony.webwork.views.freemarker.FreemarkerServlet.doGet(FreemarkerServlet.java:44); at javax.servlet.http.HttpServlet.service(HttpServlet.java:689); at javax.servlet.http.HttpServlet.service(HttpServlet.java:802); at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252); at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173); at com.opensymphony.webwork.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:169); at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202); at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173); at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213); at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178); at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126); at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105); at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107); at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148); at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869); at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:667); at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527); at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80); at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684); at java.lang.Thread.run(Thread.java:595); 谁知道为什么?是不是我哪里配错了?如果我WEB.xml不按WW文档的配置,还是像单独使用FreeMaker的那样配,访问正常,不会出现异常。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2005-12-23
1) Google: JspTaglibs
http://www.google.com/search?hl=en&lr=&newwindow=1&q=JspTaglibs&btnG=Search 2) check item 2 then will get the link below http://jira.opensymphony.com/browse/WW-844 3) follow the document and double check your configuration |
|
返回顶楼 | |
发表时间:2005-12-23
thatway 写道 1) Google: JspTaglibs
http://www.google.com/search?hl=en&lr=&newwindow=1&q=JspTaglibs&btnG=Search 2) check item 2 then will get the link below http://jira.opensymphony.com/browse/WW-844 3) follow the document and double check your configuration 我是按照WW2.2B4源码包带的文档做的,你给推荐的文章我也看了,和我的差不多,没什么问题。但还是不行! |
|
返回顶楼 | |
发表时间:2005-12-23
webwork2.2好像已经把tld文件名称改成taglib.tld了。你有没有把taglib.tld放在/WEB-INF/下面?
另外,不建议使用FreeMarkerServlet,已经被deprecated了。 |
|
返回顶楼 | |
发表时间:2005-12-23
robbin 写道 webwork2.2好像已经把tld文件名称改成taglib.tld了。你有没有把taglib.tld放在/WEB-INF/下面?
另外,不建议使用FreeMarkerServlet,已经被deprecated了。 我就是把WWJar文件中的taglib.tld改名为webwork.tld放在WEB-INF下了。 另外你说不建议使用FreeMarkerServlet,那现在使用什么呢?我直接使用FreeMaker倒是成功了。但是FreeMaker不是被WW采用为默认的模板吗? |
|
返回顶楼 | |
发表时间:2005-12-23
thh_r 写道 robbin 写道 webwork2.2好像已经把tld文件名称改成taglib.tld了。你有没有把taglib.tld放在/WEB-INF/下面?
另外,不建议使用FreeMarkerServlet,已经被deprecated了。 我就是把WWJar文件中的taglib.tld改名为webwork.tld放在WEB-INF下了。 另外你说不建议使用FreeMarkerServlet,那现在使用什么呢? 用webwork的action阿,不要直接暴露ftl,直接暴露ftl是没有webwork的interceptor去拦截的,这样你的登陆验证,页面权限很多东西都无法生效。 |
|
返回顶楼 | |
发表时间:2005-12-23
robbin 写道 用webwork的action阿,不要直接暴露ftl,直接暴露ftl是没有webwork的interceptor去拦截的,这样你的登陆验证,页面权限很多东西都无法生效。 你是说我用Action Dispacher到一个Ftl?像这样: <!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN" "http://www.opensymphony.com/xwork/xwork-1.0.dtd"> <xwork> <!-- Include webwork defaults (from WebWork JAR);. --> <include file="webwork-default.xml" /> <!-- Configuration for the default package. --> <package name="default" extends="webwork-default"> <!-- Default interceptor stack. --> <default-interceptor-ref name="defaultStack" /> <!-- Action: Lesson 4.3: HelloAction. --> <action name="indexFreemarker" class="com.opensymphony.xwork.ActionSupport"> <result name="success" type="dispatcher">/WEB-INF/ftl/lesson3/index.ftl</result> </action> <action name="helloFreemarker" class="lesson03.HelloAction"> <result name="error" type="dispatcher">/WEB-INF/ftl/lesson3/index.ftl</result> <result name="success" type="dispatcher">/WEB-INF/ftl/lesson3/success.ftl</result> </action> </package> </xwork> |
|
返回顶楼 | |
发表时间:2005-12-23
对阿,为什么不呢?
不过ftl也没有必要非放在WEB-INF里面去。你照常放在web目录下面,然后写一个filter去拦截对*.ftl的请求,都转到首页去就行了。 |
|
返回顶楼 | |
发表时间:2005-12-23
robbin 写道 对阿,为什么不呢?
不过ftl也没有必要非放在WEB-INF里面去。你照常放在web目录下面,然后写一个filter去拦截对*.ftl的请求,都转到首页去就行了。 ![]() web.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- servlet> <servlet-name>context</servlet-name> <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet--> <filter> <filter-name>webwork</filter-name> <filter-class>com.opensymphony.webwork.dispatcher.FilterDispatcher</filter-class> </filter> <filter-mapping> <filter-name>webwork</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet> <servlet-name>aiccTracker</servlet-name> <servlet-class>net.along.tracker.aicc.interaction.service.TrackerAiccServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>aiccTracker</servlet-name> <url-pattern>/aiccTracker</url-pattern> <load-on-startup>2</load-on-startup> </servlet-mapping> <servlet> <servlet-name>freemarker</servlet-name> <servlet-class>com.opensymphony.webwork.views.freemarker.FreemarkerServlet</servlet-class> <!-- FreemarkerServlet settings: --> <init-param> <param-name>TemplatePath</param-name> <param-value>/</param-value> </init-param> <init-param> <param-name>NoCache</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>ContentType</param-name> <param-value>text/html</param-value> </init-param> <init-param> <param-name>default_encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>number_format</param-name> <param-value>0.##########</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>freemarker</servlet-name> <url-pattern>*.ftl</url-pattern> </servlet-mapping> <!-- taglib> <taglib-uri>webwork</taglib-uri> <taglib-location>/WEB-INF/webwork.tld</taglib-location> </taglib--> <welcome-file-list> <welcome-file>index.htm</welcome-file> </welcome-file-list> </web-app> xwork.xml <action name="login" class="login"> <result name="success">success.htm</result> <result name="input" type="dispatcher">/test/login.ftl</result> <interceptor-ref name="defaultStack"/> </action> login.ftl没变,异常没变! |
|
返回顶楼 | |
发表时间:2005-12-23
webwork2.2的freemarker的tag支持是内置的,你试试去掉那行jsptag的macro引用声明。
|
|
返回顶楼 | |