一个简单的Login流程:Login.html -> Start.html
Login.html
xml 代码
- <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 pagetitle>
- 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
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
xml 代码
- <html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
- <head>
- <title>test page heretitle>
- head>
- <body>
- <h1>hilo Start Pageh1>
- Welcome, ${name}! [<a href="login">Relogina>]
- body>
- html>
Start.java
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">按钮的功能?
备注:5.0.2已经不需要通过@ComponentClass来声明一个页面类了。