2012-11-11 30 views
4

我在jsp中有一个表单。有两个提交按钮:“搜索”和“添加新”按钮。我已经为每个按钮设置了自己的方法属性。Struts2:方法属性<s:submit>按钮不起作用

<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中

<?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类

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()从未被调用,而是调用方法execute()。我上面的代码有什么问题?

我正在使用struts v2.3。

+0

'方法'不应该是'POST或GET'? – Jaiwo99

+0

s的方法:form是http方法,s的方法:submit是struts2 Action方法 –

回答

5

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

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

另一种方法是定义多个映射相同的动作,像

在JSP

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

在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> 

的第三种方法是使用Wildcard Mappings

PS:如果你去了第二个,我会建议,作为最佳实践,用行动一个你必须执行每一个逻辑动作......

如果您装入普通的数据/由您的操作管理,“搜索”和“addNew”, 然后您可以定义一个employeeBaseAction,由employeeSearchAction和employeeAddNewAction扩展。


编辑

它2014现在和DMI用法一致气馁(今天比以往任何时候都多),比好看不中用其他,所以我强烈建议你使用的解决方案N.2。

+0

什么是'n.2'? – null

+0

@suud第三和第四个代码片段 –