Comment faire pour supprimer le suffixe fichier / extension (.jsp et .action) en utilisant le cadre Stripes?
Question
Je cherche à utiliser URL jolie / propre dans mon application web.
Je voudrais l'adresse suivante:
http://mydomain.com/myapp/calculator
.. résoudre à:
com.mydomain.myapp.action.CalculatorActionBean
J'ai essayé d'écraser le NameBasedActionResolver avec:
public class CustomActionResolver extends NameBasedActionResolver {
public static final String DEFAULT_BINDING_SUFFIX = ".";
@Override
protected String getBindingSuffix() {
return DEFAULT_BINDING_SUFFIX;
}
@Override
protected List<String> getActionBeanSuffixes() {
List<String> suffixes = new ArrayList<String>(super.getActionBeanSuffixes());
suffixes.add(DEFAULT_BINDING_SUFFIX);
return suffixes;
}
}
Et d'ajouter ceci à web.xml
:
<servlet-mapping>
<servlet-name>StripesDispatcher</servlet-name>
<url-pattern>*.</url-pattern>
</servlet-mapping>
Ce qui me arrive à:
http://mydomain.com/myapp/Calculator.
- Un parasite "" est encore ni assez ni propre.
- Le nom de la classe est toujours en majuscule dans l'URL ..?
- Cela me laisse encore avec
*.jsp
..? Est-il même possible de se débarrasser des deux.action
et.jsp
?
La solution
Je pense que vous êtes à la recherche de l'annotation @URLBinding. Regardez sur votre @URLBinding Bean.
@UrlBinding ( "/ calculatrice")
Autres conseils
Je suis en train de faire la même chose, et avait la même question, mais je voulais que mon URL à utiliser le slash http://mydomain.com/myapp/calculator/
La réponse est d'utiliser @UrlBinding et le DynamicMappingFilter
Je modifié l'exemple d'avoir:
@UrlBinding("/calculator/")
public class CalculatorActionBean implements ActionBean {
.
.
.
return new ForwardResolution("/WEB-INF/view/calculator.jsp");
Ensuite, j'ai ajouté le DMF à web.xml:
<filter>
<display-name>Stripes Dynamic Mapping Filter</display-name>
<filter-name>DynamicMappingFilter</filter-name>
<filter-class>net.sourceforge.stripes.controller.DynamicMappingFilter</filter-class>
<init-param>
<param-name>ActionResolver.Packages</param-name>
<param-value>com.example.stripes</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>DynamicMappingFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
</filter-mapping>
Maintenant, l'URL propre fonctionne comme prévu, et je ne suis jamais redirigé vers une URL * de .action après l'interaction avec la forme.