[Tapestry4] 深入浅出Tapestry水果店例子并发测试出错
chun79
2008-01-07
最近在学习tapestry4,阅读了深入浅出Tapestry这本书。
我导入了书上的例子进行测试,发现了程序都存在并发错误的问题。 例如:水果店登陆页面,如果用两台电脑同时都按F5刷新, 多次刷新之后基本上就会报告一个ognl表达式异常(空值NULL异常),当然如果时间能够控制同时摁下,可能一次就看到了。 我的问题是tapestry4不支持并发吗?还是书本上的例子不支持并发? 还是对于并发需要什么特别的配置呢? 希望有人能够予以解答。 如果该书的作者看到后,希望也能够抽出时间,做出一点解答! 邮件:guo.chunliang@gmail.com |
|
chun79
2008-01-08
这么严重的问题,都没 有 人 关 注吗?
|
|
chun79
2008-01-08
大家做的工程都不存在这个问题吗?
如果存在,还有必要继续往下做吗? |
|
chun79
2008-01-08
据说这是tapestry4中的一个bug,真的如此吗?
难道大家开发的程序并发都很少,或者是web的单机版吗? |
|
chun79
2008-01-09
大家在关心起其他的问题的同时难道就不关心这个问题吗?
如果你的程序不支持并发,你开发它还有什么价值呢! |
|
tapestry
2008-01-10
代码贴一下,据说是bug,哪里听说的?还有tapestry版本,ognl的版本,谢谢。
|
|
chun79
2008-01-11
是演示那个深入浅出tapestry 的书本上的例子时发现的。网上就有这个干煸四季豆的教程。两台机器同时刷,必定出错。
后来把这个例子给了深圳的朋友测试,他说可能是bug |
|
chun79
2008-01-11
既然有这么严重的bug,大家还都在埋头苦干?
没有人讨论这个bug |
|
chun79
2008-01-11
tapestry 写道 代码贴一下,据说是bug,哪里听说的?还有tapestry版本,ognl的版本,谢谢。
ognl-2.6.7.jar tapestry-4.0.2.jar tapestry-annotations-4.0.2.jar 听一个深圳的朋友说的。 不知道是不是. 我已经把例子工程发消息给你了。 大家可以随手拿自己的工程测试一下。 今天上午我就会贴出那个最简单的例子的代码。 |
|
chun79
2008-01-11
水果店登陆页面
页面类代码: package com.view.page; import org.apache.tapestry.IPage; import org.apache.tapestry.IRequestCycle; import org.apache.tapestry.annotations.InjectPage; import org.apache.tapestry.html.BasePage; public abstract class Home extends BasePage { // 取用户名和密码 public abstract String getUsername(); public abstract String getPassword(); @InjectPage("Shop") public abstract Shop getShopPage(); // 响应表单提交 /* * public void loginSubmit(IRequestCycle irc){ String * username=this.getUsername(); String password=this.getPassword(); * if(username.equals(password)){ //pass System.out.println("login OK! * UserName:"+username); }else{ //relogin System.out.println("relogin * please!"); } */ public IPage loginSubmit(IRequestCycle cycle) { String username = this.getUsername(); String password = this.getPassword(); if (username.equals(password)) { // pass System.out.println("loginOK!UserName:" + username); return this. getShopPage (); } else { // relogin this.setProperty("username", null); this.setProperty("password", null); return null; } } } |