Понимание конфигурации Struts2
-
14-09-2020 - |
Вопрос
Недавно я прохожу одно руководство по тегам пользовательского интерфейса Struts2.Итак, я нашел этот пример и воплотил его в совершенстве.
Но в файле конфигурации struts.xml я не смог понять некоторые выражения OGNL.Что я пишу здесь:
<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>
Здесь я заполняю один запрос populateRegier из index.jsp, поэтому он перенаправляет его в RegisterAction.java и выполняет метод populate() моего класса, т.е.следующее :
РегистрацияAction.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;
}
}
Первый вопрос : Я не мог понять, почему здесь выполняется метод populate()?
Второй вопрос: Каково значение method="{1}"
в struts2.xml?
Заранее спасибо...
Решение
На 2 вопроса один и тот же ответ.Если вы посмотрите на эту строку в конфигурации вашей стойки:
<action name="*Register" method="{1}" class="nirmal.RegisterAction">
Вы заметите ***** и {1}.Что делает Struts, так это забирает ваше заполнитьРегистрация запрос и выполнение сопоставления с подстановочными знаками для вышеуказанного <действия>.
Он принимает часть, соответствующую подстановочным знакам (заполняется), и использует ее в качестве имени метода (заменяет {1} на заполнение).Именно это вызывает вызов метода populate() в вашем классе nirmal.RegisterAction.
Если вы хотите вызвать метод Execute() в том же классе, вы должны отправить запрос ExecuteRegister.Есть дополнительная информация о сопоставления с подстановочными знаками на месте стоек.Лично я считаю, что они очень полезны для поддержания чистоты конфигурации.
Другие советы
Метод Populate вызывается, потому что вам нужно, чтобы некоторые данные были автоматически заполнены, что помогает пользователям выбирать или просматривать их, а также помогает вам в выборе по умолчанию.