"No configuration found for the specified action" 在 Struts 2

"No configuration found for the specified action" in Struts 2

我正在尝试学习如何使用命名空间、操作和 Struts 标签来操作 links。

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

并且寄存器link也出现了,但是坏了。我看到了类似的帖子,答案的主要目标是检查名称空间和语法问题。我是 Struts 2 的初学者,但在我的代码中没有发现这些问题,也许我使用它的方式不对?

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

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

type="redirect" 用于重定向到其他操作,而您正在重定向到 index.jsp

问题是将操作映射到各自的命名空间

在您的 HTML 表单标签中,您提到了您的操作是登录和命名空间。像这样,

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

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

您看到此警告是为了通知像您这样的开发人员您可能使用了不正确的表单标记映射。仅当您使用 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>

锚标记可以生成 link 而无需 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>