论坛首页 Java企业应用论坛

关于WebWork2.2B4使用FreeMaker的问题!

浏览 11243 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2005-12-23  
我按照WW的文档配置了FreeMaker:
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的那样配,访问正常,不会出现异常。
   发表时间: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
0 请登录后投票
   发表时间: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源码包带的文档做的,你给推荐的文章我也看了,和我的差不多,没什么问题。但还是不行!
0 请登录后投票
   发表时间:2005-12-23  
webwork2.2好像已经把tld文件名称改成taglib.tld了。你有没有把taglib.tld放在/WEB-INF/下面?

另外,不建议使用FreeMarkerServlet,已经被deprecated了。
0 请登录后投票
   发表时间: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采用为默认的模板吗?
0 请登录后投票
   发表时间: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去拦截的,这样你的登陆验证,页面权限很多东西都无法生效。
0 请登录后投票
   发表时间: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>
0 请登录后投票
   发表时间:2005-12-23  
对阿,为什么不呢?

不过ftl也没有必要非放在WEB-INF里面去。你照常放在web目录下面,然后写一个filter去拦截对*.ftl的请求,都转到首页去就行了。
0 请登录后投票
   发表时间: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没变,异常没变!
0 请登录后投票
   发表时间:2005-12-23  
webwork2.2的freemarker的tag支持是内置的,你试试去掉那行jsptag的macro引用声明。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics