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

如何致富:使用f:ajax的消息,ajax,validation,richfaces,ajax4jsf,Ajax,Validation,Richfaces,Ajax4jsf,我一直在搜索并找到诸如link之类的东西,但我已经在f:ajax中调用了ID 我试图验证来自第一个代码块的输入是否为整数;该字段还通过一个布尔复选框查看,该复选框允许用户选中一个复选框,并将数据复制到表单的其他部分。如果我删除f:ajax,我可以从第一个代码块获得要复制到第三个代码块的值,也可以从第一个代码块获得要验证的值,但是我无法使用rich:message验证来处理f:ajax调用,尽管使用了ID并且它位于一个面板组中。我做错了什么 正在尝试验证: <h:outputLabel fo

我一直在搜索并找到诸如link之类的东西,但我已经在f:ajax中调用了ID

我试图验证来自第一个代码块的输入是否为整数;该字段还通过一个布尔复选框查看,该复选框允许用户选中一个复选框,并将数据复制到表单的其他部分。如果我删除f:ajax,我可以从第一个代码块获得要复制到第三个代码块的值,也可以从第一个代码块获得要验证的值,但是我无法使用rich:message验证来处理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">

啊,好的。您使用的是
@ajaxprendered=“true”
,这意味着消息必须由某个ajax操作呈现

您可以在
中使用
@render
(消息必须有id)


或者您可以使用
(属性相同)来自动重新发送消息。或者您不能使用
@ajaxRendered


还请注意,
change
事件不会在您更改输入值时触发,而是在输入失去焦点后触发。如果要在键入时验证输入,应使用
keyup

为什么要尝试重新输入正在验证的输入?编辑:还有,你必须使用
f:ajax
?老实说,这是我的第一个web应用程序,所以我不一定知道我为什么要在那里使用它。我只是在我的代码(第一个代码块)中删除了它,复制仍然有效,但验证仍然不起作用。我不一定需要使用一种或另一种技术,我只需要它工作。技术要求灵活,但功能要求不灵活。你有其他建议吗?谢谢,我会尝试一下,如果我能让它工作的话,会告诉你的。我使用了f:ajax和messageid路由,它也能工作。非常感谢你。
<f:ajax … render="message" />
<rich:message id="message" … />