关于Laszlo(2.x 3.0)无法动态加载资源的问题
问题:
Laszlo服务器不论是2.x还是3.0beta都无法动态加载资源,而LPS服务器本身是支持动态加载的,否则也不叫服务器了!
测试:
下面是个简单的动态加载图像的demo
测试结果:
运行点击按钮后,可以触发button的onclick事件,设置view的资源为uri上的一个图片。结果却是无法正确显示图片,打开debug窗口显示错误为:
这里提示为string字符串解释错误,看来应该是uri的字符串解释失败导致view无法动态加载资源。上面错误说明是 LZHttpUtils.java中抛出的异常
结论:
也就是说应该是服务器区域设置不兼容了。我运行Tomcat的服务器是Windows2000区域设置当然是中文了,现在改成en-us,并重新启动Tomcat服务器后,上面的demo测试代码就能正常工作了。
看来Laszlo的国际化支持还是很薄弱,在LaszloSystem的在线技术论坛中这个区域的问题在2003年已经有人提出来了,但到现在2005年了还一直未予以处理,导致技术论坛上还有人骂LaszloSystem的开发团队不负责任。
测试环境配置:
PIII 667 384M
Windows2000 Server SP4
JDK 5.0
Tomcat 5.54
LPS 3.0b1
Laszlo服务器不论是2.x还是3.0beta都无法动态加载资源,而LPS服务器本身是支持动态加载的,否则也不叫服务器了!
测试:
下面是个简单的动态加载图像的demo
<?xml version="1.0" encoding="utf-8"?>
<canvas debug="true">
<debug x="150" />
<simplelayout axis="y" spacing="10" />
<button>Call setSource
<method event="onclick">
foo.setSource( 'http://localhost:8080/lps-3.0b1/test/test.jpg' );
</method>
</button>
<view id="foo" />
</canvas>
<canvas debug="true">
<debug x="150" />
<simplelayout axis="y" spacing="10" />
<button>Call setSource
<method event="onclick">
foo.setSource( 'http://localhost:8080/lps-3.0b1/test/test.jpg' );
</method>
</button>
<view id="foo" />
</canvas>
测试结果:
运行点击按钮后,可以触发button的onclick事件,设置view的资源为uri上的一个图片。结果却是无法正确显示图片,打开debug窗口显示错误为:
string(4444)#0| java.text.ParseException:
Unparseable date: "Tue, 21 Dec 2004 06:42:22 GMT" :
Exception stack: org.openlaszlo.utils.ChainedException:
java.text.ParseException:
Unparseable date: "Tue, 21 Dec 2004 06:42:22 GMT"
at org.openlaszlo.utils.LZHttpUtils.getDate(LZHttpUtils.java:128)
at org.openlaszlo.data.HTTPDataSource$HttpData.lastModified(HTTPDataSource.java:497)
at org.openlaszlo.cache.RequestCache.getItemStreamAsSWF(RequestCache.java:320)
at org.openlaszlo.cache.RequestCache.getAsSWF(RequestCache.java:128)
at org.openlaszlo.servlets.responders.ResponderCache.respondImpl(ResponderCache.java:358)
at org.openlaszlo.servlets.responders.Responder.respond(Responder.java:220)
at org.openlaszlo.servlets.LZServlet._doGet(LZServlet.java:308)
at org.openlaszlo.servlets.LZServlet.doGet(LZServlet.java:244)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFi
Unparseable date: "Tue, 21 Dec 2004 06:42:22 GMT" :
Exception stack: org.openlaszlo.utils.ChainedException:
java.text.ParseException:
Unparseable date: "Tue, 21 Dec 2004 06:42:22 GMT"
at org.openlaszlo.utils.LZHttpUtils.getDate(LZHttpUtils.java:128)
at org.openlaszlo.data.HTTPDataSource$HttpData.lastModified(HTTPDataSource.java:497)
at org.openlaszlo.cache.RequestCache.getItemStreamAsSWF(RequestCache.java:320)
at org.openlaszlo.cache.RequestCache.getAsSWF(RequestCache.java:128)
at org.openlaszlo.servlets.responders.ResponderCache.respondImpl(ResponderCache.java:358)
at org.openlaszlo.servlets.responders.Responder.respond(Responder.java:220)
at org.openlaszlo.servlets.LZServlet._doGet(LZServlet.java:308)
at org.openlaszlo.servlets.LZServlet.doGet(LZServlet.java:244)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFi
/**
* Convert an HTTP Date String to a long
*/
public static long getDate(String s) {
try {
SimpleDateFormat dateFormatter = getGMTFormatter();
return dateFormatter.parse(s).getTime();
} catch (java.text.ParseException e) {
throw new ChainedException(e);
}
}
/**
* Return a formatter for HTTP date headers
*/
private static SimpleDateFormat getGMTFormatter() {
SimpleDateFormat dateFormatter =
new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z");
TimeZone tz = TimeZone.getTimeZone("GMT");
dateFormatter.setTimeZone(tz);
return dateFormatter;
}
* Convert an HTTP Date String to a long
*/
public static long getDate(String s) {
try {
SimpleDateFormat dateFormatter = getGMTFormatter();
return dateFormatter.parse(s).getTime();
} catch (java.text.ParseException e) {
throw new ChainedException(e);
}
}
/**
* Return a formatter for HTTP date headers
*/
private static SimpleDateFormat getGMTFormatter() {
SimpleDateFormat dateFormatter =
new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z");
TimeZone tz = TimeZone.getTimeZone("GMT");
dateFormatter.setTimeZone(tz);
return dateFormatter;
}
结论:
也就是说应该是服务器区域设置不兼容了。我运行Tomcat的服务器是Windows2000区域设置当然是中文了,现在改成en-us,并重新启动Tomcat服务器后,上面的demo测试代码就能正常工作了。
看来Laszlo的国际化支持还是很薄弱,在LaszloSystem的在线技术论坛中这个区域的问题在2003年已经有人提出来了,但到现在2005年了还一直未予以处理,导致技术论坛上还有人骂LaszloSystem的开发团队不负责任。
测试环境配置:
PIII 667 384M
Windows2000 Server SP4
JDK 5.0
Tomcat 5.54
LPS 3.0b1