Visualforce Apex:pageMes​​sages验证规则问题

时间:2015-01-11 18:10:59

标签: salesforce visualforce apex

我在salesforce中的自定义employee__c对象上定义了自定义验证规则。我使用带有自定义扩展的标准控制器visualforce页面向用户显示用于数据输入的UI。我的挑战是以易于阅读的方式向用户显示验证规则错误。这是我所拥有的代码的一部分。

Visualforce

<apex:page standardController="Employee__c" extensions="EmployeeExtension" sidebar="false">
 <apex:sectionHeader ...
 <apex:form id=fr>
   <apex:pageMessages id="errMsg"/>
    <apex:pageBlock title="Employee Edit" mode="edit" >
    <apex:pageBlockButtons >
    <apex:commandButton action="{!mySave}" value="Save" reRender="errMsg"/>
    <apex:commandButton action="{!cancel}" value="Cancel"/>
    ....
 </apex:form>
</apex:page>

Apex控制器

public class EmployeeExtension {
 ....
 public PageReference mySave(){
  ....
  try{
    upsert empList;
  } catch (DMLException ex) {
     ApexPages.addMessages(ex);
  }
 }
}

这显示了页面顶部的错误,这是我想要的方式,但它显示了两次。以下是它将如何在页面顶部显示错误。

  
      
  • error_message_from_custom_validation_comes_here
  •   
  • TriggerEmployee:第0行的异常;第一个错误:FIELD_CUSTOM_VALIDATION_EXCEPTION, error_message_from_custom_validation_comes_here
  •   

在我的整个控制器中,我没有任何其他DML操作,也没有在任何其他地方使用ApexPages.addmessage。奇怪的是,如果我删除

ApexPages.addMessages(ex);

同时保持try catch块,然后我只看到

  
      
  • error_message_from_custom_validation_comes_here
  •   

我想知道为什么它在vf页面中显示页面消息,即使我没有从控制器发送任何内容。我感谢您的所有回复,但我希望看到不涉及javascript或jquery的解决方案。

1 个答案:

答案 0 :(得分:1)

您可以使用:

ApexPages.addMessage(
    new ApexPages.Message(
      ApexPages.severity.ERROR,
      ex.getMessage()
    )
  );

或者您也可以模仿standardController:

public class EmployeeExtension {
....
  public PageReference mySave(){
    /* do your thing */
    return this.standardController.save();
  }
}

这样您就可以返回保存的页面引用,这是标准行为(如果您想模仿它),如果有验证错误,它将显示在标记中,只显示格式正确的消息。

您在保存时不需要reRender:

<apex:page standardController="Employee__c" extensions="EmployeeExtension" sidebar="false">
  <apex:sectionHeader ...
  <apex:form id=fr>
    <apex:pageMessages/>
    <apex:pageBlock title="Employee Edit" mode="edit" >
      <apex:pageBlockButtons >
        <apex:commandButton action="{!mySave}" value="Save"/>
        <apex:commandButton action="{!cancel}" value="Cancel"/>
    ....
  </apex:form>
</apex:page>

Salesforce / Visualforce将为您完成剩下的工作:)