【问题标题】:struts-layout multiple submit buttons using reqCode使用 reqCode 的 struts-layout 多个提交按钮
【发布时间】:2014-06-11 00:05:13
【问题描述】:

我在我的 JSP 页面上使用 struts-layout 来显示带有单选按钮的表格。它有一个提交按钮,用于调用 struts 动作类中的执行方法。这工作正常。

我需要在同一个表单中添加另一个提交按钮来执行另一个方法,或者以某种方式简单地意识到第二个按钮是在动作类的同一个方法中单击的。我知道这可以使用 reqCode 来完成。但我就是想不通。

我的 JSP 代码:

 <layout:form action="/taskSelected.do" reqCode="execute" >
    <layout:submit value="Show Task Status" styleClass="btn btn-default"/>
    <layout:submit value="troubleshoot" styleClass="btn btn-default" reqCode="troubleshoot"/>
    <layout:collection name="userTasks" title="" styleClass="FORM" selectProperty="uniqueID" selectType="radio">
    <layout:collectionItem title="Task Name" property="name"/>
    <layout:collectionItem title="UID" property="uniqueID" />
    <layout:collectionItem title="Request Time" property="add_info" />
    <layout:collectionItem title="FTP URL" property="ftp_url"/>
    <layout:collectionItem title="Status" property="status" />
    </layout:collection>

我的 struts-config.xml

 <action name="taskBean" path="/taskSelected" scope="session" type="com.myapp.struts.taskSelectedAction" validate="false">
        <forward name="success" path="/ShowTaskStatus.jsp"/>
        <forward name="troubleshootPage" path="/ShowTroubleshoot.jsp"/>
        <forward name="failure" path="/ViewTasks.jsp"/>
    </action>

我的动作类第一种方法:

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

    System.out.println("Method 1= " + request.getSession().getAttribute("troubleshoot"));

    if(request.getSession().getAttribute("USER_KEY")==null){
        return mapping.findForward("NotLoggedIn");
    }
    System.out.println("Reached in Troubleshoot");
    return mapping.findForward("troubleshootPage");

}

第二种方法

public ActionForward execute(ActionMapping mapping, ActionForm form,
        HttpServletRequest request, HttpServletResponse response)
        throws Exception {
    System.out.println("Method 2= " + request.getSession().getAttribute("troubleshoot"));
    if(request.getSession().getAttribute("USER_KEY")==null){
        return mapping.findForward("NotLoggedIn");
    }

这应该很简单,但我就是不知道出了什么问题。

【问题讨论】:

    标签: java jsp jakarta-ee struts


    【解决方案1】:

    在您的 JSP 页面中改用两个按钮(我也尝试过一次提交两次,但对我不起作用)。

    <input type="button" value="Method1" onclick="location.href='taskSelected.do?method=method1';"/>
    <input type="button" value="Method2" onclick="location.href='taskSelected.do?method=method2';"/>
    

    在您的 struts-config.xml 文件中,添加 parameter=method

    <action name="taskBean"
            path="/taskSelected" 
            scope="session" 
            type="com.myapp.struts.taskSelectedAction" validate="false"
            parameter=method>
    

    您只需要一个动作类。

    public class taskSelectedAction extends org.apache.struts.actions.DispatchAction{
    
        public ActionForward method1(ActionMapping mapping, ActionForm form,
        HttpServletRequest request, HttpServletResponse response)
        throws Exception{
           //your code goes here     
        }
    
        public ActionForward method2(ActionMapping mapping, ActionForm form,
        HttpServletRequest request, HttpServletResponse response)
        throws Exception{
           //your code goes here
        }
    }
    

    【讨论】:

    • 感谢您的回复。通过这种方法,至少我可以获得两个不同的按钮来调用两个单独的方法。但是 DataGrid 中的数据呢?我有一个布局集合(Datagrid),我的目标是确定用户选择了网格中的哪一行。根据他选择的行和他按下的按钮,我需要启动单独的任务。使用这种方法,select 属性(在本例中为 uniqueID)返回 null。
    • 您需要创建一个 FormBean 并为其中的表单属性创建 getter/setter 方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-07
    • 2012-01-23
    • 1970-01-01
    • 2013-04-16
    • 2017-05-03
    相关资源
    最近更新 更多