第三章 输入验证
这章讲些什么?
这章您将学到如何对用户的输入进行验证,如果需要的话如何显示错误信息。另外您还将学到如何在一个循环里渲染一个组件。

邮资计算器
设想您将开发一个计算器用来计算从某地寄送一个包裹到另一个地方所需要的邮资。用户以千克为单位输入包裹的重量(看下图)。他还可以选择性地输入一个标识他自己的客户代码这样可以得到一定的折扣。点击OK后,它将显示邮资。

为了实现这样一个应用程序,我们先创建一个应用程序,名为Postage,像往常那样设好类路径、输出文件夹和web.xml,然后修改Home.html如下:
<html>
<form jwcid="form">
<table>
<tr>
<td>Weight:</td>
<td><input type="text" jwcid="weight"/></td>
</tr>
<tr>
<td>Patron code:</td>
<td><input type="text" jwcid="patronCode"/></td>
</tr>
<tr>
<td></td>
<td><input type="submit"/></td>
</tr>
</table>
</form>
</html>
在Home.page中定义组件:
<page-specification class="com.ttdev.postage.Home">
<component id="form" type="Form">
<binding name="listener" value="listener:onSubmit"/>
</component>
<component id="weight" type="TextField">
<binding name="value" value="weight"/>
</component>
<component id="patronCode" type="TextField">
<binding name="value" value="patronCode"/>
</component>
</page-specification>
Home.java 像这样:

public abstract class Home extends BasePage {
private Map patronCodeToDiscount;
@InjectPage("Result")
public abstract IPage getResult();
public abstract String getWeight();
public abstract String getPatronCode();
public Home() {
patronCodeToDiscount = new HashMap();
patronCodeToDiscount.put("p1", new Integer(90));
patronCodeToDiscount.put("p2", new Integer(95));
}
public IPage onSubmit() {
int weight = Integer.parseInt(getWeight());
Integer discount = (Integer) patronCodeToDiscount.get(getPatronCode());
int postagePerKg = 10;
int postage = weight * postagePerKg;
if (discount != null) {
postage = postage * discount.intValue() / 100;
}
IPage resultPage = getResult();
PropertyUtils.write(resultPage, "postage", new Integer(postage));
return resultPage;
}
}

接着,创建结果页面,Result.html 像这样
<html>
The postage is <span jwcid="@Insert" value="ognl:postage"/>.
</html>
Result.page 如下:
<page-specification>
<property name="postage"/>
</page-specification>
由于页面类没有指定,BasePage将被使用.Tapestry将创建它的子类来拥有属性.
接下来,在c:/tomcat/conf/Catalina/localhost创建一个上下文描述器Postage.xml:
<Context
docBase="c:/workspace/Postage/context"
path="/Postage"
reloadable="true"/>
现在可以运行这个程序了:

接收整型输入
此刻Home 页面的重量属性是字符型的,这并不好.理想的应该是个整型数.

第三章 输入验证----tapestry教程Enjoying Web DevelopmenEnjoying Development翻译相关推荐

  1. 第三章 汉化pycharm教程

    首先,打开 pycharm,然后点击左上角File 然后点击Settings 在弹出的界面中点击 Plugins 在右面的输入框内输入chinese  单击绿色按钮Restart IDE 下载汉化插件 ...

  2. 【第三章:标准单元库 下】静态时序分析圣经翻译计划

    本文由知乎赵俊军授权转载,知乎主页为https://www.zhihu.com/people/zhao-jun-jun-19 3.6 黑盒的接口时序模型 本节将介绍黑盒(任意模块或块)的IO接口时序弧 ...

  3. 第三章 Python Kivy 学习 -- Kivy官方入门教程Pong Game

    系列文章目录 第一章 Python Kivy 学习 – Kivy介绍及环境安装 第二章 Python Kivy 学习 – Kivy项目开发原理(待编辑) 第三章 Python Kivy 学习 – Ki ...

  4. 【黑金原创教程】【Modelsim】【第三章】理想就是美丽

    声明:本文为黑金动力社区(http://www.heijin.org)原创教程,如需转载请注明出处,谢谢! 黑金动力社区2013年原创教程连载计划: http://www.cnblogs.com/al ...

  5. Kali Linux 无线渗透测试入门指南 第三章 绕过 WLAN 身份验证

    第三章 绕过 WLAN 身份验证 作者:Vivek Ramachandran, Cameron Buchanan 译者:飞龙 协议:CC BY-NC-SA 4.0 简介 安全的错觉比不安全更加糟糕. ...

  6. c语言多个附加说明符,C语言教程第三章.ppt

    <C语言教程第三章.ppt>由会员分享,可在线阅读,更多相关<C语言教程第三章.ppt(36页珍藏版)>请在人人文库网上搜索. 1.第三章,顺序结构程序设计 数据输入输出 及程 ...

  7. 《机器学习系列教程》第三章 深度学习基础

    @[第三章 深度学习基础] 第三章 深度学习基础 3.1 基本概念 3.1.1 神经网络组成? 为了描述神经网络,我们先从最简单的神经网络说起. 感知机 简单的感知机如下图所示: [外链图片转存失败( ...

  8. 【《C Primer Plus》读书笔记】第8章:字符输入/输出和输入验证

    [<C Primer Plus>读书笔记]第8章:字符输入/输出和输入验证 8.1 单字符I/O 8.2 缓冲区 概念 为什么要引入缓冲区? 缓冲区的类型 ANSI C 缓冲区的大小 缓冲 ...

  9. ArcGIS for Desktop入门教程_第三章_Desktop软件安装 - ArcGIS知乎-新一代ArcGIS问答社区...

    原文:ArcGIS for Desktop入门教程_第三章_Desktop软件安装 - ArcGIS知乎-新一代ArcGIS问答社区 1 软件安装 1.1 安装前准备 请确认已经收到来自Esri中国( ...

  10. 第25章 Python3 输入和输出教程

    在前面几个章节中,咱们其实已经接触了 Python 的输入输出的功能.本章节咱们将具体介绍 Python 的输入输出. 输出格式美化 Python两种输出值的方式: 表达式语句和 print() 函数 ...

最新文章

  1. 【组队学习】【32期】统计学习方法习题实战
  2. 利用IDA6.6进行apk dex代码动态调试
  3. h3c交换机配置远程管理_高手给说下H3C交换机如何配置telnet远程登录
  4. container 的背后
  5. 使用Linux curl命令获取本机公网IP地址
  6. 23-windows下filebeat与logstash与elasticSearch的合并使用
  7. Kronos Research推出结合WOO质押机制的新资管产品规模已达1500万美元
  8. 小白该如何学习Linux操作系统(1)
  9. centos 6 安装clamav杀毒软件查毒
  10. [LeetCode] Reverse Linked List 倒置链表
  11. 三分钟了解云存储网关 使用场景
  12. 如何将pdf在线转换成word免费版
  13. 江苏计算机二级c语言考试范围,江苏省计算机二级C语言考试大纲
  14. Restlet Client 下载安装
  15. duilib开发(十):动态添加控件
  16. linux端口映射到内网机器,linux如何将公网IP映射到局域网IP?
  17. crm系统需要的服务器,灵当CRM管理系统运行环境-CRM服务器配置
  18. 7-2 学生成绩排序 (15 分)
  19. 光控可控硅有过零检测和无过零检测区别
  20. 实现简易版vue2(数据劫持,观察者,发布订阅)

热门文章

  1. 计算学习理论PAC模型
  2. redis管理_Redis 桌面管理工具Redis Desktop Manager
  3. 经济学原理笔记-微观CP12-税制的设计
  4. 专用集成电路 -- 运算电路 (加法器,乘法器,移位器)
  5. 一个好玩的c++小游戏 另外一个是木马病毒
  6. python抓取网页数据时怎样显示进度条_Python 如何实时显示进度条?
  7. android缓存清理代码,安卓缓存清除和计算
  8. python获取字典末端value值的取值方式
  9. 一文彻底解决An error occurred while creating the AVD. See idea.log for details问题
  10. Epoch Based Reclamation 的个人理解