我正在尝试学习如何使用命名空间,操作和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的首发,但是在我的代码中没有看到问题,也许我用的是错误的方式?
答案 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