[Tapestry5] T5学习小记

Linuxboy 2007-02-21
一个简单的Login流程:Login.html -> Start.html
Login.html
<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>login test page</title>
</head>
<body>
Please input your name: 
<p>
<form t:id="form" t:type="Form">
Name:<input type="text" t:type="TextField" t:id="name" validate="required,minlength=3"/><br/>
<input type="submit" value="login"/>
</form>
</p>
</body>
</html>

Login.java
package org.example.hilo.pages;

import org.apache.tapestry.annotations.Component;
//import org.apache.tapestry.annotations.ComponentClass;
import org.apache.tapestry.annotations.InjectPage;
import org.apache.tapestry.annotations.OnEvent;

import org.apache.tapestry.corelib.components.Form;

//@ComponentClass
public class Login {
	
	private String _name;
	
	@Component
	private Form _form;
	
	@InjectPage
	private Start _startPage;
	
	public String getName(){
		return _name;
	}
	public void setName(String name){
		_name = name;
	}
	
	@OnEvent("submit")
	Object onLogin(){
		//System.out.println("Name is:" + getName());
		if(_form.getHasErrors())
			return null;
		else {
			_startPage.setName(getName());
			return _startPage;
		}
	}
	
}

Start.html
<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
<head>

<title>test page here</title>
</head>
<body>
<h1>hilo Start Page</h1>
Welcome, ${name}! [<a href="login">ReLogin</a>]

</body>
</html>

Start.java
package org.example.hilo.pages;

//import org.apache.tapestry.annotations.ComponentClass;
import org.apache.tapestry.annotations.OnEvent;
import org.apache.tapestry.annotations.Persist;
//import org.apache.tapestry.annotations.Retain;

//@ComponentClass
public class Start {
	
	@Persist
	private String _name;
		
	public String getName(){
		return _name;
	}
	public void setName(String name){
		_name = name;
	}
	
}


小结:
1.不能简化T5的一些template标记,尤其是t:type,比如<form t:type="Form" t:id="form">中,没有t:type="Form"的话,这个form只是个摆设;另外,<input t:type="TextField" ...>省略t:type的话,这个input框就不能进行validate了。
2.目前测试是结果是<input ....>中,存在t:type标记的话,t:validate和validate效果等同。
3.Start页面中的private String _name;要实现持久化,可以使用@Retain 或 @Persist两个annotation的任一个,但没有研究过源代码,不清楚两者的分别。
4.Start页面还未实现页面保护,可以任意访问。页面保护的方法有哪位高手可以指点一下?
5.不知如何实现<input type="reset">按钮的功能?
bclxz520 2007-02-25
为什么在tapestry-core-5.0.2.jar中找不到org.apache.tapestry.annotations.ComponentClass
Linuxboy 2007-02-25
5.0.2已经不需要@ComponentClass了,去掉即可正常运行。
另外,5.0.2的中文支持比5.0.1更差。
跟Howard交流的结果是:他将会在5.0.3的时候修正中文支持问题。
bclxz520 2007-02-26
在哪里配置welcome页
Linuxboy 2007-02-26
默认的welcome页面就是Start,不用配置。
但如果在web.xml里配置了welcome页的话,一般就会显示这里定义的页面。
bclxz520 2007-02-26
谢谢...
Linuxboy 2007-02-26
另外,在html模板中加入t:id="html"标记,可以直接用形如http://www.some.com/start.html来访问:
<html t:id="html" xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
<head><title>some page</title></head>
<body>
some contents
</body>
</html>
bclxz520 2007-02-26
The requested resource (/t5/login.form) is not available.出现这个错误,是什么原因啊?
Linuxboy 2007-02-26
我没有碰到过这个问题。
你可以详细诉说吗?
bclxz520 2007-02-26
当我submit后,就会转向login.form,但我不明白为什么会转向login.form
Global site tag (gtag.js) - Google Analytics