【问题标题】:Struts: Not populating fields using mutators in formStruts:不在表单中使用突变器填充字段
【发布时间】:2011-03-05 21:57:24
【问题描述】:

我是第一次尝试使用 struts,但我的设置有问题。我有一个名为 TeamForm 的操作表单,其中包含以下内容:

package struts.forms;

import org.apache.struts.action.ActionForm;

import domain.TeamBean;

public class TeamForm extends ActionForm {

私有 TeamBean teamBean = new TeamBean();

公共 TeamBean getTeamBean(){ 返回teamBean; }

public void setTeamName(String teamname) { teamBean.setTeamName(teamname); } 公共字符串 getTeamName() { 返回 teamBean.getTeamName(); }

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

public void setMember2(String member2) { teamBean.setMember2(member2); } 公共字符串 getMember2() { 返回 teamBean.getMember2(); }

public void setMember3(String member3) { teamBean.setMember3(member3); } 公共字符串 getMember3() { 返回 teamBean.getMember3(); }

public void setMember4(String member4) { teamBean.setMember4(member4); } 公共字符串 getMember4() { 返回 teamBean.getMember4(); }

public void setMember5(String member5) { teamBean.setMember5(member5); } 公共字符串 getMember5() { 返回 teamBean.getMember5(); } }

我有一个名为 CreateTeamAction 的操作,其中包含以下内容: 打包 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("team", teamBean); 如果(有效团队){ System.out.println("转发到teamSuccess..."); return mapping.findForward("teamSuccess"); } 别的 { System.out.println("转发到teamFailure..."); return mapping.findForward("teamFailure"); } } 捕捉(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 会改变我所看到的行为。谁能给我解释一下?

谢谢!

【问题讨论】:

    标签: struts-1 actionform


    【解决方案1】:

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

    【讨论】:

    • 此外,Struts 将允许您拉回 TeamBean 并直接操作该 bean,而不是让表单本身上的所有这些 getter 和 setter 最终传递给 TeamBean。在 JSP 中,您将执行类似 的操作。注意 teamBean.teamName 中的点符号。这将指导 struts 从 teamForm ActionForm 中获取 teamBean bean,然后在 teamBean 上调用 teamName 设置器。
    • 欢迎来到 StackOverflow。请使用您答案的编辑链接并添加评论文本,而不是在您自己的答案中添加评论。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多