我们如何在apex上执行验证:顶点中的inputfield:VF页面中的repeat标记

时间:2012-02-07 01:59:23

标签: salesforce apex-code visualforce

我有一个Vf页面,它显示了apex:repeat标签中的列表。显示的所有字段都是顶点:inputfield。有2个字段

  1. quantity__c
  2. Change__c
  3. 我想验证,如果数量已更改,那么我想要更改字段应该 填写/强制。我可以在VF级别进行此验证吗?

    完成此任何其他方式?

    由于

    更新:这是我使用的代码,如LaceySnr所建议的。我可以看到调试日志中抛出了顶点消息,但它在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)
    

    修改

     <apex:outputpanel id="mess">
    <apex:pageMessages />
    </apex:outputpanel>
    .
    .
    .
     <apex:actionFunction name="save" action="{!Save}" rerender="mess"/>
    

1 个答案:

答案 0 :(得分:2)

您可以直接通过javascript执行此操作,或者您可以使用<apex:actionSupport>onChange事件刷新第二个字段,但说实话我认为最简单,最强大的方法是在保存记录之前在控制器中进行验证。

修改

我假设您在页面中有一个<apex:pageMessages/>标记,请确保您重新渲染它 - 即如果您没有进行整页刷新,请将messages标记放在输出面板中并指定{您的操作的<apex:outputPanel>属性中的{1}}。

编辑II

您的操作肯定会返回rerender null吗?否则你看起来是正确的。您的动作功能和输出面板之间是否有任何页面块等?如果是这样,您可能需要深入了解ID层次结构。