Я использую плагин Struts2 Convention для сопоставления своих действий. Пожалуйста, помогите мне решить следующую проблему. Здесь у меня есть привязки действияПараметры Struts2 и параметры перенаправления
@Action(value="/{categorie:\\w+}/{hoofdgroep:\\w+}/{artikelgroep:\\w+}/", results = {
@Result(name="success", location="articlelist.jsp"),
@Result(name="maingroup", location="/%{categorie}/%{hoofdgroep}/", type="redirect"),
@Result(name="category", location="/%{categorie}/", type="redirect")
}, interceptorRefs = {
...
})
public String execute() throws Exception {
...
Category category = service.getCategory(categorie);
if (category == null) return NONE;
...
MainGroup mGroup = service.getMainGroup(hoofdgroep);
if (mGroup == null) return "category";
...
ArticleGroup artGroup = service.getArticleGroup(artikelgroep);
if (artGroup == null) return "maingroup";
...
return SUCCESS;
}
Когда, например, нет artGroup для указанного artikelgroep он должен перенаправить link _http://site/categorie/hoofdgroep/artikelgroep/
к URL _http://site/categorie/hoofdgroep/
который он отлично делает. Единственная проблема здесь в том, что она также добавляет дополнительные параметры, которые нежелательны. Поэтому ссылка _ http://site/categorie/hoofdgroep/artikelgroep/
перенаправляется на _http://site/categorie/hoofdgroep/?categorie=categorie&hoofdgroep=hoofdgroep&artikelgroep=artikelgroep.
Мой вопрос: Как избавиться от этих параметров?
Вот некоторые конфигурационные параметры из моего struts.properties файла
...
struts.serve.static=false
struts.ognl.allowStaticMethodAccess=true
struts.enable.DynamicMethodInvocation=false
struts.action.extension= ,
struts.url.includeParams=none
struts.enable.SlashesInActionNames=true
struts.mapper.alwaysSelectFullNamespace=false
struts.patternMatcher=regex
struts.convention.default.parent.package=app-default
struts.convention.action.packages=...
struts.convention.action.alwaysMapExecute=false
struts.convention.package.locators.disable=true
struts.convention.relative.result.types=dispatcher
struts.convention.result.path=/WEB-INF/jsp/
Так в основном это ошибка или он должен работать таким образом?
Возможно, это не очень изящное решение, но вот что я сделал. Я отменяю org.apache.struts2.dispatcher.ServletRedirectResult#getProhibitedResultParams
public class ServletRedirectResult
extends org.apache.struts2.dispatcher.ServletRedirectResult
{
public ServletRedirectResult() {
super();
initProhibitedResultParams();
}
public ServletRedirectResult(String location) {
super(location);
initProhibitedResultParams();
}
public ServletRedirectResult(String location, String anchor) {
super(location, anchor);
initProhibitedResultParams();
}
private List<String> prohibitedParamNames;
private void initProhibitedResultParams() {
String[] parentParams = (String[])super.getProhibitedResultParams().toArray();
int len = parentParams.length;
String[] params = new String[len + 4];
for (int i = 0; i < len; i++) {
params[i] = parentParams[i];
}
params[len] = "statusCode";
// TODO: This is a temporary solution because RegexPatternMatcher puts parameters
// from urls into ResultConfig for some reason.
params[len+1] = "categorie";
params[len+2] = "hoofdgroep";
params[len+3] = "artikelgroep";
prohibitedParamNames = Arrays.asList(params);
}
protected List<String> getProhibitedResultParams() {
return prohibitedParamNames;
}
}
Вы можете передать эти значения в действие, составить нужную строку местоположения и вместо этого ссылаться на эту новую строку. Вы думали о том, чтобы превратить эту функциональность в перехватчик, как только вы ее заработаете? – Quaternion
Я никогда не видел такого заявления @Action, как раньше. Может кто-нибудь объяснить (или указать мне на какую-то документацию), что @Action (value = "/ {category: \\ w +}/{hoofdgroep: \\ w +}/{artikelgroep: \\ w +} /" на самом деле означает – user497087
To @ user497087 Вы можете писать так, когда используете [шаблон шаблона регулярных выражений] (http://struts.apache.org/2.3.1.2/docs/wildcard-mappings.html) (struts.patternMatcher = regex) плюс [Контекстный плагин] (http://struts.apache.org/2.3.1.2/docs/convention-plugin.html) – user1278890