JSF 2 and Post/Redirect/Get?

前端 未结 1 1425
轻奢々
轻奢々 2020-11-28 07:20

Please correct me if I\'m wrong, but I\'m thinking of all of my non-AJAX submits should use the Post/Redirect/Get (PRG) way, since GET should be used to refresh/query data,

相关标签:
1条回答
  • 2020-11-28 07:50

    You could do this with a custom ConfigurableNavigationHandler. Here's a kickoff example:

    package com.example;
    
    import java.util.Map;
    import java.util.Set;
    
    import javax.faces.application.ConfigurableNavigationHandler;
    import javax.faces.application.NavigationCase;
    import javax.faces.application.NavigationHandler;
    import javax.faces.context.FacesContext;
    
    public class RedirectNavigationHandler extends ConfigurableNavigationHandler {
    
        private NavigationHandler parent;
    
        public RedirectNavigationHandler(NavigationHandler parent) {
            this.parent = parent;
        }
    
        @Override
        public void handleNavigation(FacesContext context, String from, String outcome) {
            if (!outcome.endsWith("?faces-redirect=true")) {
                outcome += "?faces-redirect=true";
            }
    
            parent.handleNavigation(context, from, outcome);        
        }
    
        @Override
        public NavigationCase getNavigationCase(FacesContext context, String fromAction, String outcome) {
            if (parent instanceof ConfigurableNavigationHandler) {
                return ((ConfigurableNavigationHandler) parent).getNavigationCase(context, fromAction, outcome);
            } else {
                return null;
            }
        }
    
        @Override
        public Map<String, Set<NavigationCase>> getNavigationCases() {
            if (parent instanceof ConfigurableNavigationHandler) {
                return ((ConfigurableNavigationHandler) parent).getNavigationCases();
            } else {
                return null;
            }
        }
    
    }
    

    Register it as follows in faces-config.xml:

    <application>
        <navigation-handler>com.example.RedirectNavigationHandler</navigation-handler>
    </application>  
    
    0 讨论(0)
提交回复
热议问题