0

初めてストラットを使用しようとしていますが、セットアップに問題があります。次の内容の TeamForm というアクション フォームがあります。

package struts.forms;

import org.apache.struts.action.ActionForm;

import domain.TeamBean;

public class TeamForm extends ActionForm {

プライベート TeamBean teamBean = new TeamBean();

public TeamBean getTeamBean(){ return teamBean; }

public void setTeamName(String チーム名) { teamBean.setTeamName(チーム名); } 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 マッピング、ActionForm フォーム、HttpServletRequest リクエスト、HttpServletResponse レスポンス) {

{ TeamBean teamBean = ((TeamForm)form).getTeamBean(); を試してください。boolean validTeam = (new CreateTeamMgr().authenticate(teamBean));

request.setAttribute("チーム", teamBean); if(validTeam) { System.out.println("teamSuccess に転送しています..."); mapping.findForward("teamSuccess"); を返します。} else { System.out.println("teamFailure に転送しています..."); mapping.findForward("teamFailure"); を返します。} } catch (ServiceLoadException e) { System.out.println("転送に失敗しました..."); e.printStackTrace(); mapping.findForward("teamFailure"); を返します。}
} }

私の 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 のすべてのメンバー データが null に設定されます。誰かが私が見逃しているものを見ることができますか?

ありがとう!


現在は機能していますが、行った変更がなぜ役に立ったのかわかりません。経験者の方が教えてくださるかもしれませんが…

私はもともと teamName というメンバー データ フィールドを持っていたので、ミューテーターに setTeamName() という名前を付けました。データ フィールドを teamname (大文字の N なし) に変更し、対応するミューテーターを setTeamname に変更しました。その変更により、すべてが機能しました。

Java の命名基準を理解しているので、teamName と setTeamName() は完全に有効な名前である必要があるため、大文字の N を小文字の N に変更すると動作が変わった理由がわかりません。誰かが私にこれを説明できますか?

ありがとう!

4

1 に答える 1

0

JSP はどのように見えましたか? JSP にプロパティ「teamname」を含む入力がある場合、Bean プロパティは大文字と小文字を区別するため、ActionForm を小文字の n に変更すると突然機能します。ActionForm のフィールドを「teamName」にしたい場合は、JSP のプロパティに同じ名前を付ける必要があります。それがあなたの問題なのか、あなたの JSP を見ないとわからないのですが、私の最初の推測です。

于 2011-07-14T12:51:10.063 に答える