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, но это мое первое предположение.

Другие вопросы по тегам