JSF:-DataType 和 Action Listener 的问题

Posted

技术标签:

【中文标题】JSF:-DataType 和 Action Listener 的问题【英文标题】:JSF:-Problem with the DataType and Action Listener 【发布时间】:2011-11-14 07:22:56 【问题描述】:

我在添加两个特定组件时遇到了 dataType 组件和 ActionListener 的问题...

JSF 的代码片段是:-

<h:outputLabel value="#msg.org_SubscriberGroupId_1 " styleClass="intro" escape="false"/>
<h:outputLabel value="&nbsp;:&nbsp;" escape="false"/>
<h:inputText value="#SubscriberServiceProfile.closedSubscriberGroupId1" id="txtClosdGrup1" styleClass="textBox" label="#msg.org_SubscriberGroupId_1" />                                                     

<h:outputLabel value="#msg.org_expiryDate_1" styleClass="intro" escape="false"/>
<h:outputLabel value="&nbsp;:&nbsp;" escape="false"/>
<rich:calendar id="expiryDate1" value="#SubscriberServiceProfile.dtExpiryDate1" styleClass="textBox" datePattern="dd-MMM-yyyy" required="false" label="#msg.org_expiryDate_1" />

代码重复5次...不同的id...和不同的索引...

我的后台 Bean 代码是:-

public class ServiceProfile


private String closedubscriberGroupId1="0";
private String closedSubscriberGroupId2="0";
private String closedSubscriberGroupId3="0";
private String closedSubscriberGroupId4="0";
private String closedSubscriberGroupId5="0";
private Date dtExpiryDate1;
private Date dtExpiryDate2;
private Date dtExpiryDate3;
private Date dtExpiryDate4;
private Date dtExpiryDate5;

//respective getters and setters

public void create(ActionListener act)

//action listener code



问题出在 ClosedSubscriberGroup 或 Expiry date 的数据类型上。 用户将在 closedSubscriberGroup Id 输入字段中输入整数值。

但问题是我的 actionListener 不会被触发,除非我在 closedSubscriberGroupId 的所有 5 个文本框中指定值。JSF 中没有验证。仍然不允许我提交表单并调用动作监听器。

可能是什么问题..????..是数据类型吗???还是其他什么问题???... 请指导我....

【问题讨论】:

你到底想做什么?您想将&lt;h:inputText id="txtClosdGrup1" /&gt; 中输入的文本转换为java Date 数据类型??或者您想在&lt;h:inputText id="txtClosdGrup1" /&gt; 上有onChange() 事件时调用bean 的方法?? 添加到页面并检查是否发生任何验证错误(或者只是查看服务器日志,应该在那里记录验证错误)。 @ken chan 我的基本需求是在 inputText 用户将输入整数值...对于 rich:date 类型,他将从日历中选择一个日期...没有 onchange 事件和只有在提交表单时,所有值才会传递给支持 Bean...没有对支持 Bean 的中间调用.... @Andrey 那是我最后的选择。但我想没有其他方法可以解决这个问题...。将 c 发送消息... 将把这 10 个条目(closedGroup 和 expirydate)放在一个新的 panelGrid 中有助于解决这个问题???? 【参考方案1】:

从您的评论看来,您似乎想将在&lt;h:inputText&gt;&lt;rich:calendar&gt; 中输入的值设置为其支持bean,并在&lt;h:inputText&gt;&lt;rich:calendar&gt; 上的onchange 事件发生时立即调用bean 方法

你可以使用a4j:support

<rich:calendar value="#bean.date" styleClass="textBox" datePattern="dd-MMM-yyyy" required="false">
    <a4j:support event="onchanged" action="#bean.onChangeDate" ajaxSingle="true"/>
</rich:calendar>

<h:inputText value="#bean.aString"  styleClass="textBox">
    <a4j:support event="onchange" action="#bean.onChangeText"  ajaxSingle="true" />
</h:inputText> 

这意味着每当&lt;h:inputText&gt;&lt;rich:calendar&gt; 上发生onchange 事件时,将触发一个Ajax 请求以调用action 属性指定的方法。 ajaxSingle 属性在这里很重要,因为它会在调用 action 之前立即将您在控件中输入的值设置为其支持 bean。

请注意,对于 rich:calendar ,onchange 事件是 onchanged 而不是 onchange

参考:

a4j:support Demo http://docs.jboss.org/richfaces/latest_3_3_X/en/devguide/html/a4j_support.html

【讨论】:

感谢您的回复..但是我将仅在表单提交而不是在 ajax 调用上将输入的值放入支持 bean...在表单提交之前没有中间 ajax 调用...所以输入所有值后,用户将单击 并调用 actionListener。在这个 actionListener 中,我使用 getter 获取这些字段的值。但是由于指定的问题,我的 ActionListener 本身在输入所有字段值之前不会被调用。我的 JSF 上没有验证。 @ankit 如果在某些字段为空的情况下无法调用&lt;h:commandButton&gt; 的操作,则表示您存在一些验证错误,导致您在这种情况下无法提交表单。添加&lt;h:messages/&gt;,查看是否有验证错误。

以上是关于JSF:-DataType 和 Action Listener 的问题的主要内容,如果未能解决你的问题,请参考以下文章

jquery li点击时添加class,并且显示对应的div,隐藏其他的div,我下面的方法太麻烦了

类数组对象 NamedNodeMap简单介绍

Spark篇---Spark中Transformations转换算子

django-admin 仿写stark组件action,filter筛选过滤,search查询

Android开发中怎样调用系统Email发送邮件

form 跳转不同页