`
jerry.yujm
  • 浏览: 4266 次
  • 来自: ...
最近访客 更多访客>>
社区版块
存档分类
最新评论

T5: SelectModel - a real world example(转载Tapestry maillist)

阅读更多
java 代码
 
  1. Eureka!  
  2.   
  3. Finally got it all working.  What caused the drop down to not be  
  4. defaulting is the fact that I declared my "Brand" list in two separate  
  5. lists... One for the ValueEncoder and one for the SelectModel.  Big no  
  6. no!  An "equals" is called on the value from the SelectModel and the  
  7. value from the ValueEncoder, so if they are initialized as separate  
  8. objects in separate lists the framework won't notice that they are equal  
  9. (because they would point to a different memory location).  I found that  
  10. the framework also seems to like things better if the List of Brands is  
  11. "@Persist"ed between pages.  Here's the final source code that I used to  
  12. get it all working (Enjoy!):  
  13.   
  14. Brand.java (simple POJO):  
  15.   
  16. public class Brand {  
  17.   
  18.     private String id;  
  19.     private String description;  
  20.       
  21.     public Brand() {}  
  22.   
  23.     public Brand(String id, String description) {  
  24.         this.id = id;  
  25.         this.description = description;  
  26.     }     
  27.   
  28.     public String getId() {  
  29.         return id;  
  30.     }  
  31.   
  32.     public String getDescription() {  
  33.         return description;  
  34.     }  
  35.       
  36. }  
  37.   
  38.   
  39. Test.java  
  40.   
  41. public class Test {  
  42.   
  43.     @Persist  
  44.     private Brand brand;  
  45.   
  46.     @Persist  
  47.     private List<Brand> brands;  
  48.       
  49.     public Brand getBrand() {  
  50.         return brand;  
  51.     }  
  52.   
  53.     public void setBrand(Brand brand) {  
  54.         this.brand = brand;  
  55.     }  
  56.       
  57.     private List<Brand> getBrands()  
  58.     {  
  59.         if(brands == null) {  
  60.             brands = new ArrayList<Brand>();  
  61.             brands.add(new Brand("1""Brand 1"));  
  62.             brands.add(new Brand("2""Brand 2"));  
  63.             brands.add(new Brand("3""Brand 3"));  
  64.             brands.add(new Brand("4""Brand 4"));  
  65.         }  
  66.           
  67.         return brands;  
  68.     }  
  69.       
  70.     public BrandSelectModel getBrandSelectModel() {  
  71.         return new BrandSelectModel(getBrands());  
  72.     }  
  73.   
  74.     public BrandValueEncoder getBrandValueEncoder() {  
  75.         return new BrandValueEncoder(getBrands());  
  76.     }  
  77.       
  78.     public class BrandValueEncoder implements ValueEncoder<Brand> {  
  79.           
  80.         private List<Brand> brands;  
  81.           
  82.         public BrandValueEncoder(List<Brand> brands) {  
  83.             this.brands = brands;  
  84.         }  
  85.   
  86.         public String toClient(Brand brand) {  
  87.             return brand.getDescription();  
  88.         }  
  89.   
  90.         public Brand toValue(String string) {  
  91.             for(Brand brand : brands) {  
  92.       
  93. if(brand.getDescription().equals(string)) {  
  94.                     return brand;  
  95.                 }  
  96.             }  
  97.             return null;  
  98.         }  
  99.   
  100.     }  
  101.       
  102.     public class BrandSelectModel implements SelectModel {  
  103.           
  104.         private List<Brand> brands;  
  105.           
  106.         public BrandSelectModel(List<Brand> brands) {  
  107.             this.brands = brands;  
  108.         }  
  109.           
  110.         public List<OptionGroupModel> getOptionGroups() {  
  111.             return null;  
  112.         }  
  113.   
  114.         public List<OptionModel> getOptions() {  
  115.             List<OptionModel> optionModelList = new  
  116. ArrayList<OptionModel>();  
  117.             for(Brand brand: brands) {  
  118.                 optionModelList.add(  
  119.                     new OptionModelImpl(  
  120.                         brand.getDescription(),   
  121.                         false,   
  122.                         brand,   
  123.                         new String[0]  
  124.                     )  
  125.                 );  
  126.             }  
  127.             return optionModelList;  
  128.         }  
  129.   
  130.     }  
  131.       
  132. }  
xml 代码
 
  1. Test.html  
  2.   
  3. <html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">  
  4. <t:form>  
  5.   
  6.     <select t:type="select" t:id="brand"  
  7.         value="brand" model="brandSelectModel"  
  8. encoder="brandValueEncoder"  
  9.         onchange="this.form.submit();" />  
  10.   
  11.     <br/>  
  12.       
  13.     <t:if test="brand">  
  14.         ${brand.description}  
  15.     </t:if>  
  16.   
  17. </t:form>  
  18. </html>  
<brand>
Eureka! 最终调试好的代码:BrandSelectModel 和BrandValueEncoder 写的都挺完美的,要比我写的流畅多了,把List brands 作为参数传入,很符合写Swing程序时候的习惯,如果作为全局变量就显的混乱的多。另外 toClient(Brand brand) 接口里的声明是Object 类型,在我这里会报错。真希望多一些这样的classic demo。
<brand> <brand> <brand> <brand> <brand> <brand> <brand> <brand> <optiongroupmodel> <optionmodel> <optionmodel> <optionmodel></optionmodel> </optionmodel> </optionmodel> </optiongroupmodel> </brand></brand></brand></brand></brand></brand></brand></brand></brand>
分享到:
评论
2 楼 zhangrong108 2010-03-10  
不行哦 ,在我这里都没有值
1 楼 oliverswan 2007-10-12  
我显示出来的 列表框怎么什么都没有啊,会是什么原因?
还有啊 JDK5的新循环方法在我这里会报错的,我把它改成了Object,
"另外 toClient(Brand brand) 接口里的声明是Object 类型,在我这里会报错。真希望多一些这样的classic demo。"
在我这里也是一样的

相关推荐

    EasyIMEIChanger

    IMEI 可以通过软件方式修改,如...3. 选择对应机型的"SelectModel",切记要选择"SelectCableType"→"AutoDet"和"Selectsoftware" NSE-1 。 4. 输入想要的15位数字 5. 手机桌面/拨号界面输入"*#06#",即可显示该IMEI 。

    select网络模型

    1. `SelectModel.cpp`: 可能包含`select`模型的具体实现代码,涉及如何创建和管理文件描述符集以及如何调用`select`函数。 2. `Socket.cpp`和`Socket.h`: 这些可能是处理套接字操作的类定义和实现,包括创建、连接、...

    E3Tree中文参考1.5]

    java.util.List datas = new java.util.ArrayList(); java.util.Map data = new java.util.HashMap(); data.put("id","10"); data.put("parentId",null); data.put("name","Root"); datas.add(data); %&gt; &lt;e3:tree id...

    Vue Element 分组+多选+可搜索Select选择器实现示例

    在Vue应用中,`selectList`是一个包含多个对象的数组,每个对象都有`name`(一级名称)、`CName`(二级名称)和`value`(值)属性。例如: ```javascript var selectList = [ { name: "Group1", CName: "Option1",...

    vgg16-webapp

    / selectModel CNN不能保持直觉集中; 显示消息“文件已上传”上传测试数据(可选) 后端: / params优化器选项? 学习率? 默认参数要覆盖; 误差测量功能? 先进的Appium。 / name默认值,并在modelName中显示...

    PhotoPicker-1:Android照片选择器库

    PhotoPicker基于 、 修改的一个图片选择类库。效果图使用方法ImageConfig可选属性, 用于过滤照片列表信息。ImageConfig config = new ImageConfig();...intent.setSelectModel(SelectModel.SINGLE);in

    Angular5中提取公共组件之radio list的实例代码

    例如,`[list]="sourceArr"`提供选项列表,`[name]="'selectedSource'"`设置单选按钮组的名称,`[colNum]="12"`设置列数,`[(selectModel)]="selectedSource"`双向数据绑定当前选中的值,`(selectChange)="select...

    New-Mexico-R-Model

    6. **特征选择与工程**:`caret`包中的`selectModel`函数可以帮助进行特征选择,`recipes`包则用于特征工程,创建新的预测变量。 7. **模型解释**:对于复杂的模型,如随机森林或神经网络,`varImp`函数可以计算...

    利用python实现逐步回归

    在实际操作中,我们通常会使用`statsmodels`库的`SelectModel`类或者`RFE`(Recursive Feature Elimination)方法来实现逐步回归。例如,`sm.OLS`可以用来建立线性回归模型,`RFE`则可以根据模型的得分自动进行特征...

    weka 中j48源码解析

    `selectModel`函数是`ModelSelection`策略中的关键部分,它负责评估数据集的分布情况,确定是否满足继续分割的条件。如果所有实例属于同一类别或实例数量不足以进一步分割,函数将返回`NoSplit`模型;否则,它将在...

    Android仿微信发表说说实现拍照、多图上传功能

    intent.setSelectModel(SelectModel.MULTI); // 设置为多选模式 intent.setShowCamera(true); // 显示拍照选项 intent.setMaxTotal(6); // 最多选择6张图片 intent.setSelectedPaths(imagePaths); // 设置已选图片...

Global site tag (gtag.js) - Google Analytics