tapestry4应用之For组件

来源:互联网 发布:nginx 反向代理 iis 编辑:程序博客网 时间:2024/04/30 16:07

    说明:这些内容来自于T4的官方文档和自己的理解,如果有不对的地方请批评指正

    For组件和Foreach组件一样是循环组件,从T4开始Foreach组件不再 建议使用了。当我们在Form组件中使用For组件的时候,For组件会在Form组件第一次解析的时候,将其source参数所绑定的数据集合以某种规则而转化为一个字符串,放在Form表单的一个hidden的域中,当Form组件发生二次解析的时候,For组件根据隐藏在Form表单hidden域中字符串找回source参数所绑定的数据集合,从而避免Form组件在第一次解析和第二次解析的时候,由于source参数所绑定的数据集合不一致而造成的StaleLink异常。

  如果source参数的数据是一个基本数据类型或者数据能被序列化T4将能自动的把对象转化成一个字符串,如果不能被序列化将报一个带有“Could not find a strategy instance for class”的ApplicationRuntimeException。

  解决方法如下:

1、只存储数据对象的主键

     可以定义一个包含主键的属性给keyExpression参数

2、让存储数据的类可以序列化

  T4将自动的转换序列化的数据成字符串然后存储在form中

3、按照自己的方式定义类到字符串的转换方式。需要自己实现SqueezeAdaptor方法,然后在WEB-INF/hivemodule.xml中注册你的squeeze adaptor

4、使用For组件的volatile 参数,这个参数默认值为false,如果为true则表示在For组件第一次解析的时候不需要

将source参数所绑定的数据转化成字符串并隐藏在hidden域中。

官方建议的使用1、2这两种解决办法。

 

 

原创粉丝点击