0

我第一次尝试使用 struts,但我的设置有问题。我有一个名为 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 teamname) { teamBean.setTeamName(teamname); } 公共字符串 getTeamName() { return teamBean.getTeamName(); }

公共无效 setMember1(String member1) { teamBean.setMember1(member1); } 公共字符串 getMember1() { 返回 teamBean.getMember1(); }

公共无效 setMember2(String member2) { teamBean.setMember2(member2); } public String getMember2() { return teamBean.getMember2(); }

公共无效 setMember3(String member3) { teamBean.setMember3(member3); } public String getMember3() { return teamBean.getMember3(); }

公共无效 setMember4(String member4) { teamBean.setMember4(member4); } public String getMember4() { return teamBean.getMember4(); }

公共无效 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 执行(ActionMapping 映射,ActionForm 表单,HttpServletRequest 请求,HttpServletResponse 响应){

尝试 { TeamBean teamBean = ((TeamForm)form).getTeamBean(); boolean validTeam = (new 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 的所有成员数据都设置为 null。谁能看到我错过了什么?

谢谢!


它现在可以工作了,但我不确定为什么我所做的改变会有所帮助。也许有经验的人可以告诉我...

我最初有一个名为 teamName 的成员数据字段,因此我将 mutator 命名为 setTeamName()。我将数据字段更改为 teamname(没有大写 N),并将相应的 mutator 更改为 setTeamname。这种变化使一切正常。

据我了解 Java 命名标准,teamName 和 setTeamName() 应该是完全有效的名称,所以我不明白为什么将大写 N 更改为小写 N 会改变我所看到的行为。谁能给我解释一下?

谢谢!

4

1 回答 1

0

你的 JSP 是什么样的?如果您的 JSP 有一个带有属性“teamname”的输入,那么将 ActionForm 更改为小写 n 会突然起作用,因为 bean 属性区分大小写。如果您希望 ActionForm 的字段为“teamName”,那么 JSP 中的属性必须以相同的方式命名。如果没有看到您的 JSP,我不确定这是否是您的问题,但这是我的第一个猜测。

于 2011-07-14T12:51:10.063 回答