【问题标题】:pass link value to bean将链接值传递给 bean
【发布时间】:2013-11-25 19:19:28
【问题描述】:

我有一个带有如下链接的 JSP 文件:

<a href="links.do?method=homeAdmin">
<a href="links.do?method=signUp">

我有一个动作类LinkAction.java

public class LinkAction extends org.apache.struts.action.Action {

    public ActionForward signUp(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        return mapping.findForward("signUp");
    }
    public ActionForward homeAdmin(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        return mapping.findForward("homeAdmin");
    }
}

问题是它不起作用。但是当我把它改成这样的时候,它只适用于signUp 动作。

public class LinkAction extends org.apache.struts.action.Action {

    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        return mapping.findForward("signUp");
    }

}

我也试过改成

public class LinkAction extends DispatchAction { ... }

这是我的struts-config.xml

<action input="/index.jsp"
        name="signUp" 
        path="/links" 
        scope="session" 
        type="Actions.LinkAction">
   <forward name="signUp" path="/signUp.jsp"/>
   <forward name="homeAdmin" path="/homeAdmin.jsp"/>
</action>

我想对我网页中的所有链接使用这个单一的操作文件。我该怎么做?

【问题讨论】:

  • 您能在struts-config.xml 中分享操作定义吗?。
  • 我认为您只需要在struts-config.xml 中添加一些内容并使用扩展类org.apache.struts.actions.DispatchAction 的操作。

标签: java html jsp struts-1


【解决方案1】:

您需要添加parameter="method"。这标识了包含方法名称的请求参数。

如果你有下一个动作类:

package actions;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;

public class LinkAction extends DispatchAction {

    public ActionForward signUp(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        return mapping.findForward("signUp");
    }

    public ActionForward homeAdmin(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        return mapping.findForward("homeAdmin");
    }
}

您将需要在struts-config.xml 文件中进行以下配置:

<form-beans>
    <form-bean name="SignUpForm" type="org.apache.struts.action.DynaActionForm">
        <form-property name="fname" type="java.lang.String" />
        <form-property name="lname" type="java.lang.String" />
        <form-property name="usr" type="java.lang.String" />
        <form-property name="pwd" type="java.lang.String" />
    </form-bean>
</form-beans>
<action-mappings>
    <action path="/links"
            type="actions.LinkAction"
            name="SignUpForm"
            input="/index.jsp"
            parameter="method"
            scope="session">
       <forward name="signUp" path="/signUp.jsp"/>
       <forward name="homeAdmin" path="/homeAdmin.jsp"/>
    </action>
</action-mappings>

另见org.apache.struts.actions.DispatchAction

【讨论】:

  • 我是否可以在 struts 配置中的同一操作中添加多个输入?因为我使用同一个 LinkAction.java 文件有来自多个页面的链接。
  • 是的,在 struts 配置中添加参数="method" 有效。
  • input 属性用于验证错误以及当您 return mapping.getInputForward(); 用于 forward 到输入页面时。通过简单的链接,你可以使用html:link标签。
【解决方案2】:
Struts1 always calls execute(ActionMapping mapping, ActionForm form,
        HttpServletRequest request, HttpServletResponse response) 

处理请求的方法。您可以尝试在execute() 方法中获取请求parameter('method') 并根据其值将其代理给homeAdmin 或signUp。

【讨论】:

    【解决方案3】:

    正如上面 piyush 解释的那样,通过 DispatchAction click http://struts.apache.org/release/1.3.x/struts-extras/apidocs/org/apache/struts/actions/DispatchAction.html 扩展你的动作类来做到这一点

    你的配置文件中的配置应该是这样的

    <action-mappings>
      <action input="/yourpage.jsp" parameter="method" name="yourform" 
        path="/yourAction" scope="session/request" type="yourpackage.youraction">
        <forward name="signup" path="/yourpage.jsp" />
    </action>
    

    【讨论】:

      【解决方案4】:

      根据我的问题,

      1.) 有没有什么办法,通过一个动作类,你可以处理多项任务,比如:你的两种方法都可以工作。

      public ActionForward signUp(ActionMapping mapping, ActionForm form,
          HttpServletRequest request, HttpServletResponse response)
          throws Exception {
      
      return mapping.findForward("signUp");
      }
      
      public ActionForward homeAdmin(ActionMapping mapping, ActionForm form,
          HttpServletRequest request, HttpServletResponse response)
          throws Exception {
      
      return mapping.findForward("homeAdmin");
      }
      

      如果正确,那么您应该选择另一种类型的 Action,即 DispatchAction,因为它提供了编写多个方法的能力。

      详情:

      public class LanguageSelectAction extends DispatchAction{
      
      public ActionForward chinese(ActionMapping mapping,ActionForm form,
          HttpServletRequest request,HttpServletResponse response) 
      throws Exception {
      
          request.getSession().setAttribute(
                  Globals.LOCALE_KEY, Locale.SIMPLIFIED_CHINESE);
      
          return mapping.findForward("provide");
      }
      
      public ActionForward english(ActionMapping mapping,ActionForm form,
          HttpServletRequest request,HttpServletResponse response) 
      throws Exception {
      
          request.getSession().setAttribute(
                  Globals.LOCALE_KEY, Locale.ENGLISH);
      
          return mapping.findForward("success");
      }
      
      public ActionForward german(ActionMapping mapping,ActionForm form,
          HttpServletRequest request,HttpServletResponse response) 
      throws Exception {
      
          request.getSession().setAttribute(
                  Globals.LOCALE_KEY, Locale.GERMAN);
      
          return mapping.findForward("success");
      }
      
      public ActionForward france(ActionMapping mapping,ActionForm form,
          HttpServletRequest request,HttpServletResponse response) 
      throws Exception {
      
          request.getSession().setAttribute(
                  Globals.LOCALE_KEY, Locale.FRANCE);
      
          return mapping.findForward("success");
      }
      

      }

      你可以得到详细的here

      【讨论】:

      • 返回 mapping.findForward() 在每个方法中返回相同的字符串。我想根据我调用的方法转发不同的字符串。
      • @Ankit in web.xml,一切准备就绪,你正在映射你的动作,现在如果你看到 ,那么它是说您正在返回“provide”代替“success”字符串。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-02
      • 1970-01-01
      • 1970-01-01
      • 2011-06-02
      • 1970-01-01
      • 2013-12-30
      • 1970-01-01
      相关资源
      最近更新 更多