Struts 2:找不到指定操作的配置

时间:2015-03-01 21:49:29

标签: java jsp struts2

我正在尝试学习如何使用命名空间,操作和struts标记来操作链接。

我在index.jsp页面中有一个简单的登录表单:

<s:form action="login" method="POST" namespace="/welcome">
    <s:textfield name="email" label="e-mail" type="email"></s:textfield>
    <s:password name="password" label="Password" type="password"></s:password>
    <s:submit value="Log-in"></s:submit>
</s:form>

<s:url var="url" namespace="/client" action="register"></s:url>
<p>
    <s:a label="Register" href="#url" />
</p>

struts.xml中进行映射:

  <struts>
    <constant name="struts.devMode" value="true" />
    <package name="welcome" namespace="/welcome" extends="struts-default">
        <action name="index">
            <result>/index.jsp</result>
        </action>
    </package>

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

        <action name="register"
            class="magazine.action.client.RegisterClientAction"
            method="execute">
            <result name="input" type="redirect">/index.jsp</result>
        </action>

        <action name="login"
            class="magazine.action.client.LoginClientAction"
            method="execute">
            <result name="input" type="redirect">/WEB-INF/view/client/view.jsp
            </result>
            <result name="error" type="redirect">/index.jsp</result>
        </action>
    </package>

</struts>

index.jsp正在显示,但我进入调试模式的是:No configuration found for the specified action。注册链接也会出现,但它已经破了。我看到类似的帖子和答案中的主要目标是检查命名空间和语法问题。我是struts2的首发,但是在我的代码中没有看到问题,也许我用的是错误的方式?

3 个答案:

答案 0 :(得分:1)

问题是将操作映射到相应的命名空间

在您的HTML表单标记中,您已经提到过您的操作是登录,欢迎命名空间。像这样,

<form action="login" id="myForm" method="post" namespace="/welcome">

但根据您使用命名空间welcome映射的包,并没有名为login的操作,但在另一个包中可用。您需要做的就是将登录操作复制并粘贴到欢迎包中,或者在欢迎包中创建名为login的新操作。

答案 1 :(得分:1)

您会看到此警告,通知像您这样的开发人员您可能使用不正确的表单标记映射。仅当您使用struts.devMode=true时,才会显示这些消息。您在表单标记中使用了错误的命名空间值。变化

<s:form namespace="/client" action="login" method="POST">
    <s:textfield name="email" label="e-mail" type="email"/>
    <s:password name="password" label="Password" type="password"/>
    <s:submit value="Log-in"/>
</s:form>

anchor标记可以使用动作名称和命名空间生成不带URL的链接。例如

<s:a namespace="/client" action="register">Register</s:a>

但是如果你需要构建url,那么使用OGNL语法强制评估href属性中的表达式。

<s:url var="url" namespace="/client" action="register"/>
<p>
    <s:a href="%{#url}">Register</s:a>
</p>

答案 2 :(得分:0)

我想问题是你的锚标签,对吧?如果是这样, 试试这个,

<a href="<s:url namespace="/client" action="register"/>">Register</a>

更改struts.xml

<action name="register"
        class="magazine.action.client.RegisterClientAction"
        method="execute">
        <result name="input">/index.jsp</result>                
</action>

型=&#34;重定向&#34;用于重定向到其他操作,而您重定向到index.jsp