tapestry 学习笔记(2)----Using Forms

§2-1
这小节 先来实现一个非常简单的form。在页面上只有一个文本框和一个提交按钮,提交之后将文本框中的信息打印在控制台上。

Home.html 

< html >
  
< head >
    
< title ></ title >
  
</ head >
  
< body >
      
< form  jwcid ="myForm" >
          
< input  type ="text"  jwcid ="username" />
          
< input  type ="submit"  value ="提交" />
      
</ form >
  
</ body >
</ html >

Home.page
< page-specification  class ="com.simpleForm.pages.Home" >
    
< component  type ="Form"  id ="myForm" >
        
< binding  name ="listener"  value ="listener:onSubmit" />
    
</ component >
    
< component  type ="TextField"  id ="username" >
        
< binding  name ="value"  value ="ognl:username" />
    
</ component >
</ page-specification >

Home.java
package  com.simpleForm.pages;

import  org.apache.tapestry.html.BasePage;

public   class  Home  extends  BasePage  {
    
   
private String username;

    
public String getUsername() {
        
return username;
    }


    
public void setUsername(String username) {
        
this.username = username;
    }

   
public void onSubmit()
   
{
       System.out.println(
"提交的值是:"+username);
   }

    
}


运行工程,在文本框里输值并提交,控制台能成功打印相应的值。

注意:form和text在组件定义里,component 的type标签分别是Form 和 TextField,这是区分大小写的。必须是Form和TextField,指明组件的类型分别是form表单和文本框。
Form组件有个listener监听,绑定page类的一个方法,执行提交后的操作。方法名任意。
username这个组件也被绑定到page类的一个属性。page类里必须有这个属性的get方法。

§2-2
下面对上面的代码稍加修改。实现提交后页面跳转的功能。
创建一个显示结果的页面 Result.html

< html  lang ='zh' >
  
< head >
  
< meta  http-equiv ="Content-Type"  content ="text/html; charset=GB2312" >
    
< title ></ title >
  
</ head >
  
< body >
      The Result is:
< span  jwcid ="resultValue" ></ span >
  
</ body >
</ html >

相应的Result.page

< page-specification  class ="com.simpleForm.pages.Result" >
    
< component  id ="resultValue"  type ="Insert" >
        
< binding  name ="value"  value ="ognl:resultValue" />
    
</ component >
</ page-specification >

还有page类

package  com.simpleForm.pages;

import  org.apache.tapestry.html.BasePage;

public   class  Result  extends  BasePage  {
 
private String resultValue;

    
public String getResultValue() {
        
return resultValue;
    }


    
public void setResultValue(String resultValue) {
        
this.resultValue = resultValue;
    }

}


下面修改Home.java的onSubmit()方法,使其接收到提交参数后跳转到Result页面

    public   void  onSubmit(IRequestCycle cycle)
   
{
       System.out.println(
"提交的值是:"+username);
       cycle.activate(
"Result");
   }

onSubmit方法多了一个参数,IRequestCycle cycle  看名字像是接口类型的。
cycle.activate("Result");  跳转到Result页面。如果之前还有其他activate事件的话,只执行最后一个。
这个功能还可以换个方式实现,修改onSubmit函数:

  public  String onSubmit(IRequestCycle cycle)
   
{
       System.out.println(
"提交的值是:"+username);
       
return "Result";
   }

修改其返回值为String类型,return页面的名称就可以了,不需要cycle.activate了。。不过那个参数还是要的。

运行结果 成功跳转,但是没有将提交的参数显示出来,接下就是要这事儿。
我们在onSubmit方法里调用Result页面类,然后调用resultValue的set方法,最后跳转到Result.html来显示。
修改onSubmit方法,添加Result的page类调用,以及resultValue设置的代码。

    public  String onSubmit(IRequestCycle cycle)
   
{
       System.out.println(
"提交的值是:"+username);
       Result resultPage
=(Result) cycle.getPage("Result");
       resultPage.setResultValue(username);
       
return "Result";
   }

上面的代码中,在获得将要跳转的页面后,还可以将其直接return,就可以跳转了:

  public  IPage onSubmit(IRequestCycle cycle)
   
{
       System.out.println(
"提交的值是:"+username);
       Result resultPage
=(Result) cycle.getPage("Result");
       resultPage.setResultValue(username);
       
return resultPage;
   }

函数的返回值改成了IPage。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值