Struts: не заполнять поля, используя мутаторы в форме
Я пытаюсь использовать стойки в первый раз, и что-то не так в моей настройке. У меня есть форма действий под названием TeamForm со следующим содержимым:
package struts.forms;
import org.apache.struts.action.ActionForm;
import domain.TeamBean;
public class TeamForm extends ActionForm {
частный TeamBean teamBean = новый TeamBean ();
public TeamBean getTeamBean () {возвращение teamBean; }
public void setTeamName (String teamname) {teamBean.setTeamName (teamname); } public String getTeamName () {return teamBean.getTeamName (); }
public void setMember1 (String member1) {teamBean.setMember1 (member1); } public String getMember1 () {return teamBean.getMember1 (); }
public void setMember2 (String member2) {teamBean.setMember2 (member2); } public String getMember2 () {return teamBean.getMember2 (); }
public void setMember3 (String member3) {teamBean.setMember3 (member3); } public String getMember3 () {return teamBean.getMember3 (); }
public void setMember4 (String member4) {teamBean.setMember4 (member4); } public String getMember4 () {return teamBean.getMember4 (); }
public void setMember5 (String member5) {teamBean.setMember5 (member5); } public String getMember5 () {return teamBean.getMember5 (); }}
У меня есть действие под названием CreateTeamAction со следующим: package struts.actions;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import managers.CreateTeamMgr;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import struts.forms.TeamForm;
import domain.TeamBean;
import exceptions.ServiceLoadException;
public class CreateTeamAction extends Action {
public ActionForward execute (отображение ActionMapping, форма Action Form, запрос HttpServletRequest, ответ HttpServletResponse) {
try {TeamBean teamBean = ((TeamForm) form).getTeamBean (); логический validTeam = (новый CreateTeamMgr (). authenticate (teamBean));
request.setAttribute ("team", teamBean); if (validTeam) {System.out.println ("Пересылка в teamSuccess...");
return mapping.findForward("teamSuccess");
}
else {
System.out.println("Пересылка в teamFailure...");
return mapping.findForward("teamFailure");
}
} catch (ServiceLoadException e) {
System.out.println("Пересылка к ошибке..."); e.printStackTrace (); return mapping.findForward ("teamFailure"); }
}}
Применимые части моего struts-config.xml: (Обратите внимание, что "перед открывающим тегом struts-config не является частью моего файла. Мне пришлось добавить его, чтобы xml отображался в окне предварительного просмотра.):
"<struts-config
<form-beans
<form-bean
name="teamForm"
type="struts.forms.TeamForm"/>
</form-beans>
<action-mappings>
<action
path="/team"
type="struts.actions.CreateTeamAction"
name="teamForm"
scope="request">
<forward name="success" path="/teamHome.jsp"/>
<forward name="failure" path="/teamError.jsp"/>
</action>
</action-mappings>
</struts-config>
Насколько я понимаю, Struts должен использовать сеттеры в моей TeamForm для заполнения значений для TeamBean. К сожалению, этого не происходит. Когда я пытаюсь запустить, все данные участника для TeamBean устанавливаются в нуль. Кто-нибудь может увидеть, что мне не хватает?
Спасибо!
Сейчас это работает, но я не уверен, почему внесенные мной изменения помогли. Может быть, кто-то с большим опытом может сказать мне...
У меня изначально было поле данных члена с именем teamName, поэтому я назвал мутатор setTeamName (). Я изменил поле данных на имя команды (без заглавной буквы N) и соответствующий мутатор на setTeamname. Это изменение заставило все работать.
Как я понимаю в стандартах именования Java, teamName и setTeamName () должны были быть совершенно допустимыми именами, поэтому я не понимаю, почему изменение заглавной буквы N на строчную букву N изменило поведение, которое я видел. Кто-нибудь может мне это объяснить?
Спасибо!
1 ответ
Как выглядел ваш JSP? Если у вашего JSP есть входные данные со свойством "teamname", то изменение ActionForm на строчные буквы n внезапно сработает, поскольку свойства bean-компонентов чувствительны к регистру. Если вы хотите, чтобы поле вашей ActionForm было "teamName", то свойство в JSP должно быть названо таким же образом. Я не уверен, если это ваша проблема или нет, не видя вашу JSP, но это мое первое предположение.