2017-06-21 4 views
0
@ParentPackage("basePackage") 
@Namespace("/") 
@Action(value = "userAction") 
@AllowedMethods("test") 
public class UserAction { 

    private static final String[] test = null; 
    private static Logger logger = Logger.getLogger(UserAction.class); 

    public void test() { 
     logger.info("进入action"); 
    } 
} 

Dans le fichier de configuration struts.xml:Comment utiliser l'annotation Struts2.5 @AllowedMethods ('test') pour implémenter une méthode d'appel dynamique?

<constant name="struts.strictMethodInvocation.methodRegex" value="([a-zA-Z]*)"/> 

Je veux visiter http://localhost:8080/sshe/userAction! Test.action!

Now the error: HTTP Status 404 - There is no Action mapped for namespace and action name [/] [userAction test] associated with context path [/sshe].!

Je me demande s'il y a un endroit à installer. Comment puis-je accéder à cette adresse?

+0

Pourquoi avez-vous besoin DMI du tout? Votre méthode 'test' n'est pas adaptée à la méthode d'action. –

Répondre

0

Vous devez placer l'annotation directement sur la méthode. Parce que si vous le mettez sur la classe, la méthode par défaut execute() est utilisée pour le mappage.

@ParentPackage("basePackage") 
@Namespace("/") 
@AllowedMethods("test") 
public class UserAction { 

    private static final String[] test = null; 
    private static Logger logger = Logger.getLogger(UserAction.class); 

    @Action(value = "userAction") 
    public String test() { 
     logger.info("进入action"); 
     rerurn Action.NONE; 
    } 
} 

La méthode d'action doit renvoyer un résultat, si vous ne voulez pas exécuter un résultat que vous devriez retourner Action.NONE.


Si vous souhaitez utiliser SMI alors vous devez ajouter execute() méthode à la classe d'action. Ce qui précède explique pourquoi vous avez besoin de cette méthode pour mapper l'action et le résultat de retour reste le même puisque l'exécution de la méthode reste la méthode d'action. Vous ne pouvez pas utiliser le mappage d'action pour exécuter arbitrairement n'importe quelle méthode dans la classe d'action.

@ParentPackage("basePackage") 
@Namespace("/") 
@AllowedMethods("test") 
@Action(value = "userAction") 
public class UserAction { 

    private static final String[] test = null; 
    private static Logger logger = Logger.getLogger(UserAction.class); 

    public String execute() { 
     rerurn Action.NONE; 
    } 


    public String test() { 
     logger.info("进入action"); 
     rerurn Action.NONE; 
    } 
} 

La méthode d'action est sensible à la casse, donc vous devez utiliser l'URL

http://localhost:8080/sshe/userAction!test.action 
+0

Suivez votre deuxième morceau de code, Exception: Statut HTTP 404 - Il n'y a pas d'action mappée pour l'espace de noms [/] et le nom d'action [userAction! Test] associé au chemin de contexte [/ sshe]. –

+0

pouvez-vous me dire où trouver le document officiel pour cette annotation. J'ai essayé, mais je ne pouvais pas le trouver –

+0

Vous avez désactivé DMI. Lisez [ce guide] (https://struts.apache.org/core-developers/action-configuration.html) –