在默认我希望我的struts2应用程序转到行动:

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

<struts>

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

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


        <action name="Login_*" method="{1}" class="myApp.SessionManager">
            <result name="input">/myApp/Login.jsp</result>
            <result type="redirectAction">Menu</result>     
        </action>

    </package>

    <package name="default" namespace="/" extends="struts-default">
        <default-action-ref name="index" />
        <action name="index">
            <result type="redirectAction">
                <param name="actionName">Login_input.action</param>
                <param name="namespace">/myApp</param>
            </result>
        </action>
    </package>


</struts>

我寻找的应用程序叫SessionManager.输入(),但是它呼吁SessionManager.执行().

有帮助吗?

解决方案

你不想要一般公众 输入() 法。最基本和典型的方案中的行动是:

  • 该行动旨在"做什么"(一件事),这一行动需要的某些用户输入。
  • 该行动并不是在方法 执行()
  • 如果行动没有成功,什么东西,它returs 成功.这将触发一结果的内容丰富JSP页。
  • 如果行动没有得到输入的用户(因为没有任何,或者是因为它是不足或错误)返回 输入.这将触发一个"输入形式"JSP使得用户可以填补数据以及(重新)尝试的动作。

现在,这一基本方案可以编码的方式中的几种,其中包括:

1)两个不同的映射,一个用于输入形式,其他执行

<!-- default action class: execute does nothing, returns SUCCES -->
<action name="ActionXXXShowForm"> 
                <result>/myApp/XXXForm.jsp</result>
</action>

<action name="ActionXXX" class="myApp.XXXAction"> 
                <result name="input">/myApp/XXXForm.jsp</result>
                <result>/myApp/XXXDone.jsp</result>
</action>

2)只是一映射

<action name="ActionXXX"  class="myApp.XXXAction"> 
                <result name="input">/myApp/XXXForm.jsp</result>
                <result>/myApp/XXXDone.jsp</result>
</action>

两者都非常相似(特别是如果您正在做的方案的验证)。在这两种情况下,我们只有一个"支柱"方法的行动(执行),这是良好的做法,因为我们的行动只是"一件事"。但是,在第二种情况下,我们需要处理的情况下在其中没有数据是职位,而不要发出一个错误信息,对这种情况。

例如:在例1:

public class XXXAction extends ActionSupport {
    ...    
    public String execute() throws Exception {
        if(! inputOk()) return INPUT;
         // .. do your stuff
        return SUCCESS;
    }

    private boolean inputOk() {
       // ... check your inputs - sort of programatic validation
       if( surname == null ) addActionError("no surname");
       // .... more checks
       return ! hasActionErrors());
    }

}

在例2的修改略:

public class XXXAction extends ActionSupport {
    ....    
    public String execute() throws Exception {
        if( emptyInput() ) return INPUT;  // no error messages in this case
        if(! inputOk()) return INPUT;
         // .. do your stuff
        return SUCCESS;
    }

    private boolean inputOk() {
       // same as before
    }

    private boolean emptyInput() {
       // detect no input was sent. do not emit errors herer
    }
}

其他提示

当调用从JSP的动作,默认方法是执行()。如果要调用另一个方法,可以通过属性方法符合规范=“”。

<s:url action="SessionManager" method="input"/>

属性的方法是在其他标签常见。

如果您使用的是<s:a...标签,那么你将不能够调用预期的方法除了默认execute()方法。相反<s:a...标签,你需要使用<s:url...标签与ID定义操作和调用相同的正常使用HTML锚标记,即, <a href=${<<id>>}但可能需要在struts.xml中或任何其它的XML配置文件,它已包含在与<action... method="..."子句中的方法的属性的struts.xml文件中指定方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top