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

本文介绍使用Tapestry框架实现简单表单功能的方法,并演示如何通过表单提交进行页面跳转及参数传递。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

§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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值