Struts:不使用表单中的mutators填充字段

时间:2010-06-20 02:28:01

标签: struts-1 actionform

我第一次尝试使用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);  }  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的Action,其中包含以下内容:     包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 { 

公共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”);    }    其他{     System.out.println(“Forwarding to 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中的setter来填充TeamBean的值。不幸的是,这种情况并没有发生。当我尝试运行时,TeamBean的所有成员数据都设置为null。谁能看到我错过的东西?

谢谢!


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

我最初有一个名为teamName的成员数据字段,因此我将mutator命名为setTeamName()。我将数据字段更改为teamname(无资本N),并将相应的mutator更改为setTeamname。这一改变使一切顺利。

据我了解Java命名标准,teamName和setTeamName()应该是完全有效的名称,所以我不明白为什么将大写字母N改为小写字母N会改变我所看到的行为。任何人都可以向我解释这个吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

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