Compreensão da configuração do Struts2
-
14-09-2020 - |
Pergunta
Recentemente estou realizando um tutorial para tags de UI do Struts2.Então, encontrei esse exemplo e executei-o com perfeição.
Mas, no arquivo de configuração struts.xml, não consegui entender algumas das expressões OGNL.Que estou escrevendo aqui:
<struts>
<package name="default" extends="struts-default">
<action name="*Register" method="{1}" class="nirmal.RegisterAction">
<result name="populate">/register.jsp</result>
<result name="input">/register.jsp</result>
<result name="success">/success.jsp</result>
</action>
</package>
</struts>
Aqui estou preenchendo uma solicitação em populateRegier de index.jsp, então estou redirecionando-a para RegisterAction.java e executando o método populate() da minha classe, ou seja,do seguinte modo :
RegisterAction.java
package nirmal;
import java.util.ArrayList;
import com.opensymphony.xwork2.ActionSupport;
public class RegisterAction extends ActionSupport {
private String userName;
private String password;
private String gender;
private String about;
private String country;
private ArrayList<Country> countryList;
private String[] community;
private ArrayList<String> communityList;
private Boolean mailingList;
public String populate() {
countryList = new ArrayList<Country>();
countryList.add(new Country(1, "India"));
countryList.add(new Country(2, "USA"));
countryList.add(new Country(3, "France"));
communityList = new ArrayList<String>();
communityList.add("Java");
communityList.add(".Net");
communityList.add("SOA");
community = new String[]{"Java",".Net"};
mailingList = true;
return "populate";
}
public String execute() {
return SUCCESS;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getAbout() {
return about;
}
public void setAbout(String about) {
this.about = about;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public ArrayList<Country> getCountryList() {
return countryList;
}
public void setCountryList(ArrayList<Country> countryList) {
this.countryList = countryList;
}
public String[] getCommunity() {
return community;
}
public void setCommunity(String[] community) {
this.community = community;
}
public ArrayList<String> getCommunityList() {
return communityList;
}
public void setCommunityList(ArrayList<String> communityList) {
this.communityList = communityList;
}
public Boolean getMailingList() {
return mailingList;
}
public void setMailingList(Boolean mailingList) {
this.mailingList = mailingList;
}
}
Primeira pergunta : Não consegui entender por que está executando o método populate() aqui?
Segunda questão : Qual é o significado de method="{1}"
em struts2.xml?
Desde já, obrigado...
Solução
As 2 perguntas têm a mesma resposta.Se você olhar esta linha na configuração do struts:
<action name="*Register" method="{1}" class="nirmal.RegisterAction">
Você notará um ***** e o {1}.O que o struts está fazendo é levar o seu preencherRegistrar request e realizando uma correspondência curinga na <ação> acima.
Ele pega a parte correspondente do curinga (preencher) e a usa como nome do método (substitui {1} por preencher).Isso é o que faz com que o método populate() seja invocado em sua classe nirmal.RegisterAction.
Se você quisesse invocar o método execute() na mesma classe, você enviaria uma solicitação executeRegister.Há mais informações sobre mapeamentos curinga no site dos suportes.Pessoalmente, descobri que eles são muito úteis para manter a configuração limpa.
Outras dicas
O método Populate é chamado porque você precisa que alguns dados sejam preenchidos automaticamente, o que ajuda os usuários a selecioná-los ou visualizá-los, e também ajuda na seleção padrão.