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(){ return teamBean; }

public void setTeamName (имя команды String) { teamBean.setTeamName (имя команды); } общественная строка 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, форма ActionForm, запрос HttpServletRequest, ответ HttpServletResponse) {

try { TeamBean teamBean = ((TeamForm)form).getTeamBean(); логическое значение validTeam = (новый CreateTeamMgr().authenticate(teamBean));

request.setAttribute("команда", teamBean); if(validTeam) { System.out.println("Переадресация в teamSuccess..."); вернуть сопоставление.findForward("успех команды"); } else { System.out.println("Пересылка в teamFailure..."); вернуть сопоставление.findForward("teamFailure"); } } catch (ServiceLoadException e) { System.out.println("Переадресация на сбой..."); e.printStackTrace(); вернуть сопоставление.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 изменило поведение, которое я видел. Кто-нибудь может мне это объяснить?

Спасибо!


person ZeldaPinwheel    schedule 20.06.2010    source источник


Ответы (1)


Как выглядел ваш JSP? Если бы ваш JSP имел ввод со свойством «имя команды», то изменение ActionForm на нижний регистр n внезапно сработало бы, поскольку свойства компонента чувствительны к регистру. Если вы хотите, чтобы поле ActionForm было "teamName", то свойство в JSP должно быть названо таким же образом. Я не уверен, что это ваша проблема или нет, не видя вашего JSP, но это мое первое предположение.

person Cameron    schedule 14.07.2011
comment
Кроме того, вместо того, чтобы иметь все эти геттеры и сеттеры в самой форме, которые в конечном итоге передаются в TeamBean, Struts позволит вам извлечь TeamBean и напрямую управлять этим компонентом. В JSP вы должны сделать что-то вроде ‹html:text name=teamForm property=teamBean.teamName /›. Обратите внимание на запись через точку в teamBean.teamName. Это направит struts на получение bean-компонента teamBean из teamForm ActionForm, а затем вызовет установщик teamName в teamBean. - person Cameron; 14.07.2011
comment
Добро пожаловать в StackOverflow. Пожалуйста, используйте ссылку редактирования своего ответа и добавьте текст комментария вместо добавления комментария к своему самостоятельному ответу. - person Tony Rad; 17.11.2012