Salesforce 如何在VF页面中的apex:repeat标记中的apex:inputfield上执行验证

Salesforce 如何在VF页面中的apex:repeat标记中的apex:inputfield上执行验证,salesforce,apex-code,visualforce,Salesforce,Apex Code,Visualforce,我有一个Vf页面,它在apex:repeat标记中显示一个列表。显示的所有字段都是apex:inputfield。有两个字段 数量 改变 我要验证,如果数量已更改,则我希望更改字段应 必须填写/必须填写。我可以在VF级别进行此验证吗 还有其他的方法吗 谢谢 更新:这是我按照LaceySnr的建议使用的代码。我可以看到apex消息在调试日志中抛出,但在Vfpage中不可见 for (integer i=0;i<List_FinalStdItems.size();i++) {

我有一个Vf页面,它在apex:repeat标记中显示一个列表。显示的所有字段都是apex:inputfield。有两个字段

  • 数量
  • 改变
  • 我要验证,如果数量已更改,则我希望更改字段应 必须填写/必须填写。我可以在VF级别进行此验证吗

    还有其他的方法吗

    谢谢

    更新:这是我按照LaceySnr的建议使用的代码。我可以看到apex消息在调试日志中抛出,但在Vfpage中不可见

         for (integer i=0;i<List_FinalStdItems.size();i++)
        {
            system.debug('inside loop to check quantity is changed');
            ItemSet.add(List_FinalStdItems[i].id);
            system.debug('New quantity'+List_FinalStdItems[i].quantity__c +'  old quantity'+MapStdItemsOldMap.get(List_FinalStdItems[i].id).quantity__c);
         //   system.debug('old quantity'+MapStdItemsOldMap.get(List_FinalStdItems[i].id).quantity__c);
            if (MapStdItemsOldMap.get(List_FinalStdItems[i].id).quantity__c!=List_FinalStdItems[i].quantity__c)
            {
                system.debug('This quantity for item '+List_FinalStdItems[i].Name+ ' has changed');
                if(List_FinalStdItems[i].Inventory_Change_Reason__c==null || List_FinalStdItems[i].Inventory_Change_Reason__c=='')
                {
                    system.debug('This quantity for item '+List_FinalStdItems[i].Name+ ' has changed and Reason for change is empty');
                    ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR,'Reason for change not entered for changed Quantity'));
                    error=true;
                }
            }
        }
    
    
    01:04:55.541 (541902000)|SYSTEM_METHOD_ENTRY|[151]|ApexPages.addMessage(ApexPages.Message)
    01:04:55.541 (541985000)|VF_PAGE_MESSAGE|Reason for change not entered for changed Quantity
    01:04:55.542 (542008000)|SYSTEM_METHOD_EXIT|[151]|ApexPages.addMessage(ApexPages.Message)
    

    for(integer i=0;i您可以通过javascript直接执行此操作,也可以使用
    onChange
    事件刷新第二个字段,但老实说,我认为最简单、最健壮的方法是在保存记录之前在控制器中执行验证

    编辑

     <apex:outputpanel id="mess">
    <apex:pageMessages />
    </apex:outputpanel>
    .
    .
    .
     <apex:actionFunction name="save" action="{!Save}" rerender="mess"/>
    
    我假设您在页面中有一个
    标记,请确保您正在重新提交它-也就是说,如果您没有进行整页刷新,请将messages标记放在输出面板中,并在
    重新提交
    属性中为您的操作指定

    编辑II


    您的操作是否确实返回了一个
    null
    Pagereference
    ?否则,您的操作看起来是正确的。在您的操作函数和输出面板之间是否有任何页面块等?如果是这样,您可能需要向下钻取id层次结构。

    我主要关心的是如何验证字段是否已更改,您是否建议我通过列表oop并检查包含以前值的列表?这就是我要做的,只需保留记录id->old value的映射,然后对照它进行检查。我可以在调试日志中获得顶点:消息,但在VF页面中未显示。知道什么原因更新了问题..仍然无法显示消息。整个页面似乎得到了刷新。我发现了调用javascript函数的方式存在问题。我必须返回false。这导致页面刷新