Можно ли использовать вызов метода подстановочных знаков в Struts2 с плагином соглашений, использующим только аннотации? - PullRequest
6 голосов
/ 18 мая 2011

Я знаю, как использовать вызов метода подстановочных знаков в struts.xml, но возможно ли это сделать с помощью аннотаций?Если так, то как?

1 Ответ

8 голосов
/ 07 марта 2012

Возможно, вы уже решили это, но для тех, кто ищет ответ, да, это возможно.

Для сопоставления с подстановочными знаками см. http://struts.apache.org/2.3.1.2/docs/wildcard-mappings.html

Чтобы прочитать параметры из URL, аннотируйте ваш метод следующим образом:

private String id;

@Action(value = "edit/{id}",
        results={@Result(name = "success", location = "/WEB-INF/views/devices/edit.ftl")}
)        
public String edit() {  
    // do something
    return SUCCESS;
}

public void setId(String id) {
    this.id = id;
}

public String getId() {
    return id;
}
  • Вам понадобится метод получения / установки для параметра id.
  • Вам необходимо указать результаты, так как struts2 не будет знать, что использовать для успеха для URL: ... edit / 123, поэтому необходимо использовать @Result для указания на ваш файл. В некотором роде здесь определена цель плагина конвенции.

Если я хочу перенаправить на определенный URL, используйте эту аннотацию:

@Action(value = "index",
        results={@Result(name = "success", location = "/devices/edit/${entityId}", type = "redirect")}
    )

Вам понадобится метод получения / установки для entityId (в моем случае - String).

Вы также можете использовать расширенное сопоставление wilcard, сопоставление подстановочных знаков пространства имен ...

Не забудьте изменить struts.xml и добавить следующие константы.

<!-- Used for advanced wilcard mapping -->
<constant name="struts.enable.SlashesInActionNames" value="true"/>
<constant name="struts.mapper.alwaysSelectFullNamespace" value="false"/>
<constant name="struts.patternMatcher" value="regex" />
...