Tapestry的Form内组件组件运用总结

【Qt实战项目】记事本完整项目 效果图如下所示: 全部代码如下: #include “notepad.h” #include int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.showMaximized(); return a.exec(); } 阅读详情
A) Insert 组件
e.g.
    <input type="text" jwcid="name @Insert" value=" ognl:user.name"/>
    页面表现时,将会到页面类中寻找getUser().getName()方法获取初值并输出
    相当于在页面上显示数据.

B) TextField 组件
e.g.
    <input type="text" jwcid="username @TextField" value=" ognl:username"/>
    页面表现时,将会到页面类中寻找getUsername()方法获取初值
    *如果是修改信息页面,通常初始值要在页面表现之前由setUsername()手动设置从数据库中读取出来的值
    表单提交时,通过setUsername()写入新值(即用户输入值),在类中通过getUsername()获取新值
    相当于在修改个人信息时,首先读出用户名赋予文本框(用户名)初值,用户修改时填入新值,后台获取之
    *Hidden属性区分是普通文本输入框(默认false)和密码输入框(hidden="ognl:true")
    readonly属性设置只读 readonly="true"为只读(后台可读取)
    *disabled属性设置是否可写 diabled="true"为不可写(后台也不可读取)

C) TextArea 组件
e.g.
    <textarea jwcid="content @TextArea" value=" ognl:content" cols="40" rows="10"></textarea>
    页面表现时,将会到页面类中寻找getContent()方法获取初值
    工作原理同TextField

D) RadioGroup/Radio 组件
e.g.
    <span jwcid="headImage @RadioGroup" selected=" ognl:headImage">
      <input jwcid=" @Radio" type="radio" value="1"/>头像1
      <input jwcid=" @Radio" type="radio" value="2"/>头像2
      <input jwcid=" @Radio" type="radio" value="3"/>头像3
      <input jwcid=" @Radio" type="radio" value="4"/>头像4
      <input jwcid=" @Radio" type="radio" value="5"/>头像5
      <input jwcid=" @Radio" type="radio" value="6"/>头像6
    </span>
    RadioGroup为每一个Radio提供一个唯一的ID。RadioGroup跟踪当前被选中的属性值,并且只有一个Radio能够被选中.
    页面提交时,RadioGroup组件就利用OGNL表达式向headImage字段写入被选中的Radio组件的value参数值.
    页面表现时(修改页面),将会到页面类中寻找getHeadImage()方法获取初值,然后寻找 @Radio组件中与其相同的组件并勾选上.

E) PropertySelection 组件
    使用PropertySelection组件必须要构造一个类来实现IPropertySelectionModel接口,并且重写该接口的5个方法.
    public int getOptionCount() //提供下拉菜单的长度
    public Object getOption(int index) //提供select标签的option
    public String getLabel(int index) //提供select标签的Label值,也就是下拉菜单显示的内容
    public String getValue(int index) //提供select标签的value值
    public Object translateValue(String value) //selected后的返回值,value值未必就是我们需要的返回值,可以在这个方法里面对返回的value做对应的转换或修改.
e.g.1. 性别下拉框
    <select jwcid="gender @ProPertySelection" name="genderSelect" value=" ognl:gender" model=" supportedGender">
      <option selected>先生</option>
      <option>女士</option>
    </select>
Java代码
  1. GenderSelectionModel.java   
  2. public class GenderSelectionModel implements IPropertySelectionModel {   
  3.   
  4.     public static final String male = "先生";   
  5.   
  6.     public static final String female = "女士";   
  7.   
  8.     public static final String[] genderOptions = { male, female };   
  9.   
  10.     public int getOptionCount() {   
  11.         return genderOptions.length;   
  12.     }   
  13.   
  14.     public Object getOption(int index) {   
  15.         return this.translateValue(genderOptions[index]);   
  16.     }   
  17.   
  18.     public String getLabel(int index) {   
  19.         return genderOptions[index].toString();   
  20.     }   
  21.   
  22.     public String getValue(int index) {   
  23.         return genderOptions[index];   
  24.     }   
  25.   
  26.     public Object translateValue(String value) {   
  27.         if (value.equals("先生")) {   
  28.             return "1";   
  29.         } else {   
  30.             return "0";   
  31.         }   
  32.     }   
  33. }  
GenderSelectionModel.java
public class GenderSelectionModel implements IPropertySelectionModel {

	public static final String male = "先生";

	public static final String female = "女士";

	public static final String[] genderOptions = { male, female };

	public int getOptionCount() {
		return genderOptions.length;
	}

	public Object getOption(int index) {
		return this.translateValue(genderOptions[index]);
	}

	public String getLabel(int index) {
		return genderOptions[index].toString();
	}

	public String getValue(int index) {
		return genderOptions[index];
	}

	public Object translateValue(String value) {
		if (value.equals("先生")) {
			return "1";
		} else {
			return "0";
		}
	}
}

Java代码
  1. ModUserInfo.java   
  2. public IPropertySelectionModel getSupportedGender() {   
  3.     return new GenderSelectionModel();   
  4. }  
ModUserInfo.java
public IPropertySelectionModel getSupportedGender() {
	return new GenderSelectionModel();
}


    存入数据库中"1"代表先生,"0"代表女士,通过translateValue(String value)方法转换
    页面表现时,通过model属性给出的IPropertySelectionModel获取下拉选项,即getSupportedGender().
    然后通过getGender()方法获取初值,比如获取"0",则在页面显示时寻找value值为"0"的选项即为"女士",并选择之作为初始选择项.


e.g.2. 日志类型下拉框
    <select jwcid="logType @PropertySelection" name="typeSelect" value=" ognl:logType" model=" supportedType">
      <option>心情日记</option>
      <option>情感天地</option>
      <option>生活感触</option>
    </select>
Java代码
  1. TypeSelectionModel.java   
  2. public class TypeSelectionModel implements IPropertySelectionModel {   
  3.        
  4.     private List typeList = new ArrayList();   
  5.   
  6.     public TypeSelectionModel(List typeList) {   
  7.         this.typeList = typeList;   
  8.     }   
  9.   
  10.     public int getOptionCount() {   
  11.         return typeList.size();   
  12.     }   
  13.   
  14.     public Object getOption(int index) {   
  15.         return ((LogType)typeList.get(index)).getValue();   
  16.     }   
  17.   
  18.     public String getLabel(int index) {   
  19.         return ((LogType) typeList.get(index)).getName();   
  20.     }   
  21.   
  22.     public String getValue(int index) {   
  23.         return ((LogType) typeList.get(index)).getValue();   
  24.     }   
  25.   
  26.     public Object translateValue(String value) {   
  27.         return value;   
  28.     }   
  29. }  
TypeSelectionModel.java
public class TypeSelectionModel implements IPropertySelectionModel {
	
	private List typeList = new ArrayList();

	public TypeSelectionModel(List typeList) {
		this.typeList = typeList;
	}

	public int getOptionCount() {
		return typeList.size();
	}

	public Object getOption(int index) {
		return ((LogType)typeList.get(index)).getValue();
	}

	public String getLabel(int index) {
		return ((LogType) typeList.get(index)).getName();
	}

	public String getValue(int index) {
		return ((LogType) typeList.get(index)).getValue();
	}

	public Object translateValue(String value) {
		return value;
	}
}

Java代码
  1. ModLog.java   
  2. public IPropertySelectionModel getSupportedType() {   
  3.     TypeSelectionModel typeSelectionModel =    
  4.                            new TypeSelectionModel(loadType(getUser().getUserId()));   
  5.     return typeSelectionModel;   
  6. }   
  7.   
  8. private List loadType(int userid) {   
  9.     ...//从数据库载入该用户的日志类型列表   
  10. }  
ModLog.java
public IPropertySelectionModel getSupportedType() {
	TypeSelectionModel typeSelectionModel = 
                           new TypeSelectionModel(loadType(getUser().getUserId()));
	return typeSelectionModel;
}

private List loadType(int userid) {
	...//从数据库载入该用户的日志类型列表
}

    页面表现时,通过model属性给出的IPropertySelectionModel获取下拉选项,即getSupportedType().
    然后通过value属性给出的初始值即,getLogType()方法获取初值,比如获取"2",则在页面显示时寻找value值为"2"的选项即为"生活感触",并选择之作为初始选择项.


F) Form组件
e.g.
    <form jwcid="logForm @Form">
      ...
    </form>
    Form的监听(listener)方法可以有两种方式:
      1. 在Form组件中声明.
        <form jwcid="logForm @Form" listener=" ognl:listener:onLogin">
          ...
        </form>
      2. 在submit类型组件中声明.
        <input type="submit" jwcid="onLogin @Submit" listener=" listener:onLogin" value="发表"/>或者
        <span jwcid=" @ImageSubmit" image="..." listener=" listener:onLogin"><img src="..." width="" height=""/></span>
      前一种方式当Form中只要有submit就会触发监听方法,后一种方式是Form中有多个submit,各自实现不同的监听方法.

G) Foreach 组件
e.g.
    <span jwcid=" @Foreach" source=" ognl:logList" value=" ognl:item">
    循环组件,遍历source参数,在表现其内容前更新value参数,将Foreach组件所包含的内容重复表现,其中可以通过value参数获取所需显示内容.
    本例中,页面表现时通过getLogList()方法获取日志列表,循环取出其中数据更新item(日志对象)并予以显示.其中item需要在页面规范(.page)文件中声明:
    <property name="item"/>
    *class参数用来寻找类似CSS的文件对Foreach进行修饰.
    Foreach组件: class="ognl:beans.evenOdd.next"
    Page文件: <bean name="evenOdd" class="org.apache. tapestry.bean.EvenOdd"/>
    CSS文件: tr.odd{background-color: #ffffff;}tr.even{background-color: #eeeeee;}

H) Conditional 组件
e.g.
    <span jwcid=" @Conditional" condition=' ognl:item.sex.equals("1")'>先生</span>
    <span jwcid=" @Conditional" condition=' ognl:item.sex.equals("0")'>女士</span>
    conditional参数为true时运行Conditional组件中的HTML模板内容.
    在 Tapestry4.0以后就不支持该组件了, 可以使用其他组件来实现:
    1. Contrib:Choose和Contrib:When
    <library id="contrib" specification-path="classpath:/org/apache/ tapestry/contrib/Contrib.library"/>(.application文件中引入Contrib类包)
    <span jwcid=" @contrib:Choose">
      <span jwcid=" @contrib:When" condition='ognl:user.gender.equals("1")'>先生</span>
      <span jwcid=" @contrib:When" condition='ognl:user.gender.equals("0")'>女士</span>
    </span>
    2. If组件
    <span jwcid=" @If" condition=' ognl:item.sex.equals("1")'>先生</span>
    <span jwcid=" @If" condition=' ognl:item.sex.equals("0")'>女士</span>
 
SerDes学习笔记:接收机CTLE均衡架构示例(USB3.1、PCIe3.0\4.0\5.0) 本文分析了USB3.1和PCIe标准中连续时间线性均衡器(CTLE)的设计演进。USB3.1Gen1采用一阶CTLE,其传递函数在长信道下具有有源滤波器特性;Gen2版本延续类似架构,通过Adc参数调节零点频率。PCIeGen3/4保持一阶结构但调整极点位置,Gen5升级为二阶传递函数,扩展Adc调节范围至-5dB~-15dB。研究表明,CTLE能有效改善信号完整性,通过参数优化可平衡信号衰减与码间干扰抑制。 阅读详情

相关推荐

textarea 样式

css textarea textarea 样式

Tapestry

一、TAPESTRY技术的综述。 tapestry是平行于struts/Spring MVC/webwork /jsf等开发工具的语言。tapestry是基于组件的开发工具。 它具有组件的可重用性。因为大量重复使用的Tapestry组件,以及高度复用的表现层逻辑,使得工作效率大幅...

chuge6367的博客 406

2000-2022年全国31省空间权重矩阵数据(内含8种)

31个省市的邻接矩阵、地理矩阵和经济地理空间矩阵0(1)1、资源内容地址:https://blog.csdn.net/2301_79696294/article/details/1403656252、代码特点:今年全新,手工精心整理,放心引用,数据来自权威,相对于其他人的控制变量数据准确很多,适合写论文做实证用 ,不会出现数据造假问题3、适用对象:大学生,本科生,研究生小白可用,容易上手!!!3、课程引用: 经济学,地理学,城市规划与城市研究,公共政策与管理,社会学,商业与管理## 数据指标说明1、空间邻接矩阵2、经济地理权重矩阵(3种不同算法)3、经理地理嵌套矩阵4、地理距离矩阵倒数5、地理距离平方倒数6、经济距离倒数矩阵(00-22)7、经济距离平方倒数矩阵(00-22)8、公里距离倒数矩阵

解读Tapestry5.1——Form

之前,我已经介绍过了Tapestry的请求调用链(《解读Tapestry5.1——请求调用链》),页面渲染(《解读Tapestry5.1——页面渲染》),和事件分派(《Tapestry5 事件分派机制》)这几个方面的内容。本文将进一步讲述有关Form及其相关组件的内容,构成一个完整的页面渲染和交互的体系,阐述清楚Tapestry的基本工作原理。1.介绍Form提交数据,是Web应用里面非常

MindHawk 3179

Tapestry笔记(三)

Tapestry笔记(三) 隐式调用组件:显示调用组件:20”/>        Tapestry启动后,扫描HTML模版,如果jwcid标签属性的值带有@则表示隐式调用,反之则显示调用组件。可以通过ID@组件来为隐式调用自定义一个组件ID,否则则由Tapestry框架自动分配ID。 Tapestry框架在HTML模版中发现jwcid标签属性的时候,

池塘 3215

第十五讲:tapestry form自定义验证

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33722405的博客 163

第十三讲:tapestry form组件

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33963594的博客 152

Tapestry组件运用总结(Form组件)

[b]A) Insert 组件[/b] e.g.          页面表现时,将会到页面类中寻找getUser().getName()方法获取初值并输出     相当于在页面上显示数据. [b]B) TextField 组件[/b] e.g.          页面表现时,将会到页面类中寻找getUsername()方法获取初值     *如果是修改信息页面,通常初始值...

rabbiter_gtt的专栏 281

Tapestry组件运用总结(Form组件)(转)

Tapestry组件运用总结(Form组件) tapestry 2008-11-10 14:26:40 阅读43 评论0 字号:大中小 订阅 Tapestry组件运用总结(Form组件) 2008年10月29日 星期三 15:09 [color=red]A) Insert 组件[/color] e.g. [code="java"] [/code] 页面表...

蜗牛/ 的博客 212

Tapestry3.0开发概论

一、TAPESTRY技术的综述。 tapestry是平行于struts/Spring MVC/webwork /jsf等开发工具的语言。tapestry是基于组件的开发工具。它具有组件的可重用性。因为大量重复使用的Tapestry组件,以及高度复用的表现层逻辑,使得工作效率大幅度提升。Tapestry组件是一个“黑盒子”,用于表现HTML响应,以及响应HTTP请求。 Tape...

asrglx8740的博客 500

Tapestry中的组件及功能

A)Foreach组件: 首先,我们接触到的第一Tapestry组件是Foreach组件。Foreach是一个循环组件,它遍历source参数,并在表现其内容前更新value参数。这是Tapestry组件参数的至关重要特性:将一个属性与一个组件参数绑定,组件不仅读取被绑定的属性,而且更新属性。 Foreach组件使用&lt;span&gt;标签,当其表现(render)时,并不直接生成任何HTML...

Ethanxumf的博客 879

Tapestry学习十三:关于组件(八)submit组件

 为了解决上面的问题,我们需要一个submit组件:  我们还需要一个对应的提交事件处理方法: @OnEvent(component="submitButton")void onSubmitButton() { System.out.println("Submit button was pressed!"); // TODO: Some code to

memoordit的专栏 1292

tapestry 关于'personid must be enclosed by a Form component'

如果在tml页面使用了tapestry页面控件,运行时jboss报错"personid must be enclosed by a Form component",老是提示标签没有结束标签标志,上网查了一个,发现在tapestry官方网站上发现了这么一句话,"All Tapestry form control element components must be enclosed by a For

887

Tapestry的使用

"@Insert" value="ognl:t4start" /> 在上面的代码中,调用了Tapestry的官方组件Insert,value属性是Insert组件的参数之一。 "@"符号用于区分jwcid是一个组件类型还是一个组件ID,如果是一个组件ID,tapestry将在HTML模板对应的页面规范中寻找对应该组件ID的组件调用配置。 (亦可这样理解,"@"为官

憧憬美好生活的boy 2439

tapestry常用组件使用

[code="..."] 1、For source:是对应的java类里的List 对象或者是个数组 需要抽象 或者提供set get方法 value:是循环这个source对象代表当前的一个 ,需要在page文件中设置问一个属性,可以不在对应的java类里有这个属性 index:是循环的索引值 同value一样 在page文件中设置一个属性即可 在循环的时候 会自动为vlaue和in...

赵子龙||zbb 769

Tapestry 5组件事件

Tapestry 5组件事件   本文根据http://tapestry.apache.org/tapestry5/tapestry-core/guide/event.html翻译整理过来,请高手指正,转载请注明出处!   本人随后时间将忙于单点登录研究,翻译Tapestry 5的时间不多,稍后章节翻译将会较慢,还望各位继续支持!   组件事件   组件事件是指组件所察觉到的用户的行为,如点击链接...

天天向商! 228

Tapestry笔录

1.     Tapestry作为开源框架,属于Servlet的扩展,即建立在Servlet之上的一个框架,并且工作在Servlet Containers或者application server(包含servlet containers)之上,当然理所当然的构建于Servlet Containers或者application server与Tapestry application之间。2.  

池塘 786
上一篇: 解决Tapestry5中文问题 (转)
下一篇: Tapestry Snippets(转)
chinafc
博客等级 码龄23年 6粉丝 6原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值