[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;
		}
	}

}
Global site tag (gtag.js) - Google Analytics