我有一个Vf页面,它显示了apex:repeat标签中的列表。显示的所有字段都是顶点:inputfield。有2个字段
我想验证,如果数量已更改,那么我想要更改字段应该 填写/强制。我可以在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"/>
答案 0 :(得分:2)
您可以直接通过javascript执行此操作,或者您可以使用<apex:actionSupport>
与onChange
事件刷新第二个字段,但说实话我认为最简单,最强大的方法是在保存记录之前在控制器中进行验证。
修改强>
我假设您在页面中有一个<apex:pageMessages/>
标记,请确保您重新渲染它 - 即如果您没有进行整页刷新,请将messages标记放在输出面板中并指定{您的操作的<apex:outputPanel>
属性中的{1}}。
编辑II
您的操作肯定会返回rerender
null
吗?否则你看起来是正确的。您的动作功能和输出面板之间是否有任何页面块等?如果是这样,您可能需要深入了解ID层次结构。