如何致富:使用f:ajax工作的消息

时间:2014-01-15 15:53:20

标签: ajax validation richfaces ajax4jsf

我一直在搜索并发现this链接等内容,但我已经在f:ajax中调用了ID。

我正在尝试将第一个代码块的输入验证为整数;此字段也通过布尔复选框查看,该复选框允许用户选中一个框,并将数据复制到表单的其他部分。我可以从第一个块中获取值复制到第三个,我可以从第一个代码块中获取值来验证我是否删除了f:ajax,但是我无法获得丰富的:消息验证以使用f :ajax调用,尽管使用了ID并且它在一个面板组中。我做错了什么?

尝试验证:

<h:outputLabel for="fireDrillStaffQuantity" value="Staff Quantity:"/>
<h:panelGroup>
    <h:inputText id="fireDrillStaffQuantity" value="#     {fireDrillBean.fireDrill.fireDrillStaffQuantity}" style="width: 175px;">
         <f:ajax event="change" execute="@this" bypassUpdates="#{true}"/>     
    </h:inputText>
    <rich:message for="fireDrillStaffQuantity" ajaxRendered="true"/>    
</h:panelGroup> 
<h:outputText value="*"/>

布尔复选框:

<h:outputLabel for="disasterDrillCopyTime" value="Use Fire Drill Data?"/>
<h:selectBooleanCheckbox value="#{fireDrillBean.copyTimes}" id="disasterDrillCopyTime"> 
    <a4j:ajax event="change" execute="@this" render="disasterDrillStartTime,disasterDrillEndTime,disasterDrillStaffQuantity,disasterDrillStaffInitials,disasterDrillSupportedQuantity,disasterDrillSupportedInitials"/>      
</h:selectBooleanCheckbox>
<h:outputText value=""/>

第一个块被复制到的字段:

<h:outputLabel for="disasterDrillStaffQuantity" value="Staff Quantity:"/>
<h:inputText id="disasterDrillStaffQuantity" value="#{fireDrillBean.fireDrill.disasterDrillStaffQuantity}" style="width: 175px;">
    <a4j:ajax event="change" execute="@this"  bypassUpdates="#{true}"  render="disasterDrillStaffQuantity"/>
</h:inputText>
<h:outputText value="*"/>

在表单的其他部分,我可以使用a4j:ajax调用(下面)进行验证,但我不知道如何将其合并到已经使用f的项目中:ajax

<a4j:ajax event="blur" bypassUpdates="true" execute="@this" /> 

只是为了进行健全性检查,这是我的xhtml文件的标题:

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:c="http://java.sun.com/jsp/jstl/core"
    xmlns:forgeview="http://jboss.org/forge/view"
    xmlns:rich="http://richfaces.org/rich"  
    xmlns:a4j="http://richfaces.org/a4j"
    xmlns:p="http://java.sun.com/jsf/html"
    template="/resources/scaffold/pageTemplate.xhtml">

1 个答案:

答案 0 :(得分:1)

啊,好的。您正在使用@ajaxRendered="true",这意味着必须通过某些ajax操作呈现消息。

您可以在@render中使用<f:ajax>(并且邮件必须包含ID)

<f:ajax … render="message" />
<rich:message id="message" … />

或者您可以使用<a4j:ajax>代替(属性相同)自动重新呈现邮件。或者您无法使用@ajaxRendered

另请注意,更改输入值时不会触发change事件,它会在输入失去焦点后触发。如果您希望输入在输入时进行验证,则应使用keyup