Struts2:< s:submit>中的方法属性按钮不起作用 [英] Struts2: method attribute in <s:submit> button doesn't work

查看:134
本文介绍了Struts2:< s:submit>中的方法属性按钮不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在jsp中有一个表单。有两个提交按钮:搜索和添加新按钮。我已经为每个按钮设置了自己的方法属性。

I have a form in jsp. There are two submit buttons: "Search" and "Add New" button. I had set each button with their own method attribute.

<s:form name="searchForm" action="employeeAction" method="post">
    <s:textfield name="id" label="Employee ID"/>
    <s:textfield name="name" label="Employee Name"/>

    <s:submit value="Search" method="doSearch"/>
    <s:submit value="Add New" method="doAddNew"/>
</s:form>

在struts.xml中

In struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>

    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="true" />

    <package name="default" namespace="/" extends="struts-default">

        <default-action-ref name="index" />

        <global-results>
            <result name="error">/error.jsp</result>
        </global-results>

        <global-exception-mappings>
            <exception-mapping exception="java.lang.Exception" result="error"/>
        </global-exception-mappings>

    </package>

    <package name="example" namespace="/example" extends="default">

        <action name="employeeAction" class="example.EmployeeAction">
           <result name="search">/example/search.jsp</result>
           <result name="add">/example/add.jsp</result>
        </action>

    </package>
</struts>

在EmployeeAction类中

In EmployeeAction class

public class EmployeeAction extends ActionSupport {

    private static final Logger logger = Logger.getLogger(EmployeeAction.class);

    @Override
    public String execute() throws Exception {    
        logger.info("Calling execute!");    
        return SUCCESS;
    }

    public String doSearch() throws Exception {    
        logger.info("Calling doSearch!");    
        return "search";
    }

    public String doAddNew() throws Exception {    
        logger.info("Calling doAddNew!");    
        return "add";
    }
}

问题是当我点击搜索添加新按钮,从未调用方法 doSearch() doAddNew(),而是调用方法的执行()即可。我上面的代码有什么问题?

The problem is when I clicked "Search" or "Add New" button, the method doSearch() or doAddNew() was never called, instead it called method execute(). What is wrong with my code above?

我正在使用struts v2.3。

I'm using struts v2.3.

推荐答案

设置

<constant name="struts.enable.DynamicMethodInvocation" value="false" />

<constant name="struts.enable.DynamicMethodInvocation" value="true" />

另一种方法是为同一个Action定义多个映射,例如

Another way is to define multiple mappings for the same Action, like

<s:submit value="Search"  action="employeeSearchAction" />
<s:submit value="Add New" action="employeeAddNewAction"/>

Struts.xml中的

in Struts.xml

<action name="employeeSearchAction" class="example.EmployeeAction" method="doSearch">
       <result>/example/search.jsp</result>
</action>
<action name="employeeAddNewAction" class="example.EmployeeAction" method="doAddNew">
       <result>/example/add.jsp</result>
</action>

第三种方法是使用通配符映射

PS:如果你选择第二个,我作为最佳实践,我建议您为每个必须执行的逻辑操作使用一个Action ...

P.S: If you go for the second one, I'll suggest, as a best practice, to use one Action for every logical action you have to perform...

如果您有两个加载/管理的公共数据action,search和addNew,
然后你可以定义一个employeeBaseAction,由employeeSearchAction和employeeAddNewAction扩展。

If you have common data loaded / managed by both your actions, "search" and "addNew", then you can define a employeeBaseAction, extended by both employeeSearchAction and employeeAddNewAction.

现在是2014年, DMI使用率被一致劝阻(今天比以往任何时候都多),除了相当无用之外,所以我强烈建议您使用解决方案n.2。

It's 2014 now, and DMI usage is unanimously discouraged (today more than ever), other than pretty useless, so I strongly suggest you to use solution n.2.

这篇关于Struts2:&lt; s:submit&gt;中的方法属性按钮不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆