Tapestry中Sumbit/ImageSubmit的属性selected和tag

news/2024/7/15 11:48:57

Tapestry中Sumbit/ImageSubmit的属性selected和tag

个人认为Submit/ImageSubmit标准组件的两个属性selected和tag的设置比较罗嗦,可能是性能和灵活性的一种权衡吧。
其中,selected指定页面类的一个属性,tag设置该页面属性的值。selected和tag组合起来可以使页面类知道用户点击了哪个提交按钮。 Tapestry已经将多个提交按钮绑定于不同的监听方法上,似乎在很多web应用中并不需要知道用户点击了哪个提交按钮。
我现在正在做的项目却需要根据不同的提交按钮而进行不同的数据校验
此时,我的实现方法是
1,SubBasePage中提供一个属性submitName用于保存用户点击的提交按钮的名字。
2,修改AbstractSubmit的handleClick方法:
if (cycle.getPage() instanceof SubBasePage) {
            SubBasePagep = (SubBasePage) cycle.getPage();
            if (cycle.getParameter(this.getId()) != null
                    && !"".equals(cycle.getParameter(this.getId()))
                    || cycle.getParameter(this.getId() + ".x") != null
                    && !"".equals(cycle.getParameter(this.getId() + ".x")))
                p.setSubmitName(this.getId());//设置提交按钮名字
        }
并修改Submit和ImageSubmit的父类为修改后的AbstractSubmit。
这样一来,在页面类中就可以根据用户点击的提交按钮的不同而进行不同的业务处理了。

3,但是,在展现页面时,Tapestry根据各组件在页面上的显示顺序进行生成,如果提交按钮是在页面的后部,则前部的输入组件的校验如果是基于该提交组件的话,SubBasePage的submitName没有及时更新,则数据校验会出现问题。所以,需要修改Form组件。覆盖父类的 renderBody方法。
public void renderBody(IMarkupWriter writer, IRequestCycle cycle) {       
        for (int i = 0; i < this.getBodyCount(); i++) {
            if (this.getBody()[i] instanceof AbstractSubmit) {
                ((AbstractSubmit) this.getBody()[i]).updateSubmitName(cycle);//抽象提交类更新submitName
            }
        }
        super.renderBody(writer, cycle);
    }

AbstractSubmit:
public void updateSubmitName(IRequestCycle cycle) {
        if (cycle.getPage() instanceof XtradeBasePage) {
            XtradeBasePage p = (XtradeBasePage) cycle.getPage();
            if (cycle.getParameter(this.getId()) != null
                    && !"".equals(cycle.getParameter(this.getId()))
                    || cycle.getParameter(this.getId() + ".x") != null
                    && !"".equals(cycle.getParameter(this.getId() + ".x")))
                p.setSubmitName(this.getId());
        }
    }
 


http://www.niftyadmin.cn/n/1995587.html

相关文章

centos虚拟机无法上网

centos虚拟机无法上网解决办法解决办法 首先确保使用的是nat模式 修改vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICEeth0 HWADDR00:0C:29:8D:E6:73 TYPEEthernet UUIDa81ecb00-6b42-4ff4-8895-170ab7a2672a ONBOOTyes #开机启动 NM_CONTROLLEDyes BOOTPROTOstatic# 修…

AngularJS controller调用services

1、定义 factory.js 文件 var appFactorys angular.module(starter.factorys, []) appFactorys.factory(GoodsFactory, function () {var goodsList [{ "id": 1, "title": "手机", "icon": "icon ion-android-phone-portrait c…

制作yum源

制作yum源创建一个文件夹&#xff0c;用来保存yum软件 mkdir /mnt/cdrom挂载 mount -t iso9660 -o ro /dev/cdrom /mnt/cdrom/修改每次重启之后都要重新挂载的问题 vi /etc/fstab 添加如下配置 /dev/cdrom /mnt/cdrom iso9660 defaults 0 …

Tapestry的数据校验功能-修改框架初试

Tapestry的数据校验功能&#xff0d;修改框架初试 不需要修改tapestry框架&#xff0c;但是前端javascript的校验功能丢失了。可以满足只需要后端校验的需要。本文对“配置一次&#xff0c;前后都用”的理想模式进行实现&#xff0c;经测试表明成功了&#xff01;1,需要修改以…

经典话语03

一女子走夜路,突然看到一男张开双臂向她走来,做拥抱状,上前就是一脚.男子倒地大哭,说:都第三块了,我招谁惹谁了,带块玻璃回家就这么难么? 海龟酒量高,某天喝醉了,朋友问:你怎么还会喝醉?海龟答:唉,章鱼那孙子非要和爷划拳,丫的,那么多手,看都看不过来,真是输惨了! 一犯人被…

fastjson报错Can not find a deserializer

使用fastjson将string转成javabean异常信息解决办法异常信息 Can not find a deserializer解决办法 出现这个异常的原因是&#xff0c;实体类的字段类型不正确。如果string中的对应字段&#xff0c;还有下级元素即{key&#xff1a;{key:value}}的时候&#xff0c;实体类的字段…

IT人求职周年记:投过百度 弃过华为

IT人求职周年记&#xff1a;投过百度 弃过华为 每年这个时候&#xff0c;都是高校招聘进行得如火如荼的时候&#xff0c;那些拿着简历四处参加招聘会的同学&#xff0c;正如一年前的我&#xff0c;期待&#xff0c;惶恐&#xff0c;焦虑&#xff0c;各种心情夹杂在一起&#xf…

AngularJS 常用指令

1、directive指令改变div样式 <div id"ParentNode" class"button-bar"><div class"bgstyle" change-element>First</div><div class"bgstyle" change-element>Second</div><div class"bgstyle&…