[JAVA] Comment exécuter le traitement des attributs d'action uniquement lorsque la boîte de dialogue de confirmation avec h: commandButton est OK

--Environnement - CentOS Linux release 7.8.2003 (Core) - Eclipse IDE for Enterprise Java Developers.Version: 2020-03 (4.15.0) - openjdk version "11.0.7" 2020-04-14 LTS - JSF 2.3.9

Chose que tu veux faire

  1. Appuyez sur le bouton pour afficher la boîte de dialogue de confirmation
  2. Cliquez sur le bouton [OK] dans la boîte de dialogue de confirmation pour exécuter la logique métier de l'attribut d'action.
  3. Rien ne se passe lorsque vous appuyez sur le bouton [Annuler] dans la boîte de dialogue de confirmation

Comment exécuter le traitement des attributs d'action uniquement lorsque OK dans la boîte de dialogue de confirmation

*. Les balises «html» et «next.xhtml» sont omises. Utilisez window.confirm pour la boîte de dialogue de confirmation.

base.xhtml


<h:head>
  <title>Pour la Qiita de Ponsuke</title>
  <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
  <h:outputScript library="js" name="base.js"/>
</h:head>
<h:body>
<h3>C'est l'écran A</h3>
<h:form id="formId">
  <div>
    <h:commandButton value="Transition d'écran"
      onclick="return confirmMessage();"
      action="#{sampleBean.showNextPage()}" />
  </div>
</h:form>
</h:body>

base.js


/**
 *Afficher une boîte de dialogue de confirmation.
 * @return {boolean}Résultat de la sélection dans la boîte de dialogue de confirmation true:Appuyez sur le bouton OK.
 */
function confirmMessage() {
    return window.confirm('Puis-je changer d'écran?');
}

SampleBean.java


package brans;

import javax.faces.view.ViewScoped;
import javax.inject.Named;

@Named
@ViewScoped
public class SampleBean implements Serializable {
    /** serialVersionUID. */
    private static final long serialVersionUID = -6782548672735889274L;
    /**
     *Afficher la page suivante.
     * @retour Page suivante.
     */
    public String showNextPage() {
        return "next.xhtml";
    }
}

Cas d'échec: ne pas retourner avec l'attribut onclick

Je retourne dans base.js, donc c'est bien, non? J'échoue souvent parce que je pense. Le processus d'attribut d'action est exécuté quel que soit le résultat de la boîte de dialogue de confirmation. Je veux que quelqu'un explique la raison ...

base.xhtml


<!--réduction-->
    <h:commandButton value="Transition d'écran"
      onclick="confirmMessage();"
      action="#{sampleBean.showNextPage()}" />
<!--réduction-->

Une écriture comme celle-ci fonctionne bien pour chaque bouton


    <h:commandButton value="Transition d'écran"
      onclick="return window.confirm('Puis-je changer d'écran?');"
      action="#{sampleBean.showNextPage()}" />

Recommended Posts

Comment exécuter le traitement des attributs d'action uniquement lorsque la boîte de dialogue de confirmation avec h: commandButton est OK
[swift5] Comment exécuter le traitement lorsque tabBar est appuyé
Mettez en majuscule uniquement la plage spécifiée avec la sous-chaîne. (Comment utiliser la sous-chaîne)
Lorsque l'accès demandé à la ressource est refusé lors de la transmission avec Docker
Comment afficher la valeur lorsqu'il y a un tableau dans le tableau
[Docker] Comment créer lorsque le code source est monté en liaison sur le conteneur
Comment contraindre l'action de la destination de transition lorsqu'elle n'est pas connectée
Comment comparer uniquement le temps avec Rails (de quelle heure à quelle heure, quelque chose comme)
Comment déboguer le traitement dans le modèle Ruby on Rails avec juste la console
[Traitement × Java] Comment utiliser la boucle
[Traitement × Java] Comment utiliser la classe
[Traitement × Java] Comment utiliser la fonction
Comment faire en sorte que la chaîne de requête émette réellement lors de l'utilisation de PreparedStatement dans JDBC
[IntelliJ IDEA] Comment formater uniquement les modifications locales lors de l'enregistrement du code source
Comment définir quand "Le constructeur Empty () n'est pas visible" se produit dans junit
Solution lorsque la connexion à la base de données n'est pas possible avec un nouveau conteneur car le port est affecté au conteneur docker existant