commandLink&comandButton VS 传参&校验

[b]1.Bug原因[/b]

***JAVAEE应用服务器管理控制台由于当时时间仓促,有部分页面未加入合法值校验。导致有些地方输入非法值时会出现异常。这一情况主要存在于编辑页面。编辑页面未加入校验的原因主要是由于当前使用的commandLink组件不太方便使用采用事件驱动进行校验,而如果改用commandButton组件后可以弥补这一缺陷,但是其向JSF Managed Bean传送参数的方式有别于commandLink(commandLink可直接在组件中进行传参,comandButton不行),导致JSF Managed Bean接收参数方式也不同,而JSF Managed Bean中现在都是按照commandLink传入参数形式来接收的(接收commandLink传入参数只需commandLink传参组件的ID,接收commandButton传入参数需:表单ID:传参组件ID)

[b]2.Bug解决方案[/b]

考虑到以后会将所有未加校验的地方整理出来,作为下一版需求,这里暂时只在JDBC连接池的创建页面、编辑页面,Ajp通道的创建页面加入输入参数的合法值校验,Ajp通道编辑页面和连接池创建编辑页面暂不进行修正。

[b]数值验证的规则:[/b]

1.数值不能为空

2.数值只能是数字,不能含有其它字符,如果参数明显为非负数的范围为:[0 , 2147483647](如果值明显不能为0的则范围为:[1 , 2147483647]);无正负之分的则范围为: [-2147483648 , 2147483647]。

3.如果几个数值间有相互依赖关系(比如:最大值不能小于最小值,最小值不能大于最大值),那么应该验证该依赖关系,以保证数值间的正确关系。

[b]实现方案:[/b]
"创建"、"保存"都改用commandButton来代替commandLink组件,并在组件外部使用inputHidden组件进行传参。JSF Managed Bean增加一种接收参数方式:如果按接收commandLink参数方式接收到的参数为空,则再采用接收commandButton传参方式进行一次接收,例如:

jdbcPoolName = FacesUtils.getRequestParameter("connectPoolName");

if (jdbcPoolName == null || jdbcPoolName.equals("")) {
jdbcPoolName = FacesUtils
.getRequestParameter("jdbcpoolform:connectPoolName");
}


如果页面有校验不通过的项,通过onclick事件驱动来禁止点击"保存""创建"按钮。(暂时采用这种方案,可能还有更好的)

补充一种方案(下次采用这种方案):

f:param组件传值,这个只是对 h:commandLink起效,但f:attribute组件可以同时用于给commandLink和commandButton组件传值,这些属性可以通过相同方式取到(父组件的 getAttributes()方法),父组件可以通过传递给actionListener的ActionEvent实例取到。基本形式如下:

 <h:commandLink actionListener="#{myBean.action}">
<f:attribute name="attrname1" value="attrvalue1" />
<f:attribute name="attrname2" value="attrvalue2" />
...
<h:outputText value="Click here" />
</h:commandLink>

<h:commandButton value="Press here" actionListener="#{myBean.action}">
<f:attribute name="attrname1" value="attrvalue1" />
<f:attribute name="attrname2" value="attrvalue2" />
...
</h:commandButton>public void action(ActionEvent event)
...{
String attrvalue1 = (String) event.getComponent().getAttributes().get("attrname1");
String attrvalue2 = (String) event.getComponent().getAttributes().get("attrname2");
...
}

[b]3.修改的代码[/b]

 Modified:
trunk/TWNS-ConsoleSrc/src/com/tongtech/twns/console/view/jdbc/JdbcPoolEditInfo.java

trunk/TWNS-ConsoleSrc/twns/config/webContainer/createAjpListener.jsp

trunk/TWNS-ConsoleSrc/twns/jdbc/createConnectPoolProperties.jsp

trunk/TWNS-ConsoleSrc/twns/jdbc/jdbcPoolList.jsp

trunk/TWNS-ConsoleSrc/twns/resource/js/validation.js


[table]
|PS:这貌似是工作以来修改的第一个产品Bug,很菜鸟... :( (on Apr 20, 2010)|
[/table]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值