7
votes

Comment mettre en œuvre la fonctionnalité "Annuler" dans une page Visualforce

Je sais que c'est comment enregistrer un enregistrement xxx

Je veux un bouton pour ne pas enregistrer l'enregistrement actuel (c.-à-d. Annuler) et accéder à la liste des enregistrements enregistrés (c.-à-d. Liste des objets pour ce type d'objet).

quelque chose comme ça ... xxx


0 commentaires

4 Réponses :


9
votes

La vue de liste d'un objet est votre URL de base / le préfixe de 3 lettres pour votre objet / o, par exemple: xxx pré>

afin que vous puissiez simplement créer une méthode d'action qui renvoie une méthode d'action qui renvoie un PagerEference Code> avec l'URL appropriée et défini sur rediriger ( pr.sedraect (true) code>). p>

Alternativement, vous pouvez utiliser votre contrôleur comme une extension de Contrôleur standard, et juste Call Annuler sur le contrôleur standard : P>

// controller extension
public class TimeSheetExtension
{
  ApexPages.standardController m_sc = null;

  public TimeSheetExtension(ApexPages.standardController sc)
  {
    m_sc = sc;
  }

  public PageReference doCancel()
  {
    return m_sc.cancel();
  }
}

// page
<apex:commandButton action="{!doCancel}" value="Cancel"/>


3 commentaires

J'essaie toujours d'utiliser les méthodes de contrôleur, car théoriquement leur protégez des changements de format URL.


Tous les identifiants d'objet pour les enregistrements de cet objet auront 3 lettres au début, mais comme le dit Jeremy, il est préférable d'utiliser les actions standard dans la mesure du possible. Vous devriez pouvoir modifier votre contrôleur en une extension juste en ajoutant un paramètre de contrôleur standard au constructeur et en modifiant la balise de sorte qu'il a standardController = "myObject__c" Extensions = "myCustomController"


Cela ne fonctionne pas lorsque Annuler Ajax Way en renvoyant NULL. Je sauvegarder des données non valides sur le champ Annuel et le champ donnez-moi une erreur. Lors de l'annulation, il remonte à la lecture seule, mais les données ont été modifiées vers des données non valides. Cependant, lorsque la page rafraîchissante, les données non valides ne sont pas là et les données précédentes sont affichées.



8
votes

Vous devez également ajouter l'étiquette immédiate à votre bouton Annuler, de sorte que le formulaire n'exécute aucune validation avant d'effectuer l'opération d'annulation.

<apex:commandButton action="{!cancel}" immediate="true" value="Cancel"/>


0 commentaires

1
votes

Tout en appliquant Annuler l'opération Visualforce, vous devez arrêter la validation de formulaire. Utilisez ci-dessous n'importe quelle méthode pour arrêter la validation de formulaire en fonction de vos besoins.

Méthode 1: strong>

P> P> P> P> P> P> P> P> P> P> Utilisant HTML-5 dans DOCTYPE dans la page Visualforce Strong> signifie que vous devriez utiliser HTML-FORMNOVALIDATEDATE STRAND> et IMMÉDIAT CODE> dans Annuler Bouton. Par exemple p> xxx pré>

Méthode 2: strong> p>

Vous devez utiliser immédiat code> BLOW Need for Validation de formulaire d'arrêt. Par exemple P>

 <apex:commandButton action="{!cancel}" value="Cancel" immediate="true"/>


0 commentaires

0
votes

L'une des autres réponses suggérées appeler l'action d'annulation du contrôleur standard afin que je souhaite développer cela puisqu'il m'a conduit dans la direction de résoudre mon problème similaire.

Si vous souhaitez annuler une modification en tant que demande Ajax sans Rafraîchir la page entière, déclarez l'action en tant que vide et ne renvoyez pas la référence de page, mais appelez toujours l'action «Annuler» sur le contrôle standard. Assurez-vous que le bouton de commande spécifie l'attribut RERender. P>

// controller extension
public class TimeSheetExtension
{
  ApexPages.standardController m_sc = null;

  public TimeSheetExtension(ApexPages.standardController sc)
  {
    m_sc = sc;
  }

  public void doCancel()
  {
    m_sc.cancel();
  }
}

// page
<apex:commandButton action="{!doCancel}" value="Cancel" rerender="container_id"/>


0 commentaires