单击 Struts 中的提交按钮时从一个名称空间更改为另一个名称空间 2

Changing from one namespace to another when clicking a submit button in Struts 2

我是 Struts 2 框架的新手,在单击提交按钮时从一个命名空间更改为另一个命名空间时遇到问题,我收到此错误。

struts.xml 文件

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

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

    <action name="verifier" class="presentation.LoginAction" method="verifierLogin">
        <result name="model.Client">/vuesJSP/client/client.jsp</result>
        <result name="model.Administrateur">/vuesJSP/admin/ajouterClient.jsp</result>
        <result name="error">/vuesJSP/login/login.jsp</result>
        <result name="input">/vuesJSP/login/login.jsp</result>
    </action>

</package> 

<package name="module-Admin" namespace="/admin" extends="struts-default">

    <action name="ajouter" class="presentation.AdminAction" method="ajouterClient">
    <result name="success">/vuesJSP/admin/ajouterClient.jsp</result>
    <result name="error">/vuesJSP/admin/ajouterClient.jsp</result>
    <result name="input">/vuesJSP/admin/ajouterClient.jsp</result>
    </action>

    <action name="modifier" class="presentation.AdminAction" method="modifierClient">
    </action>

    <action name="supprimer" class="presentation.AdminAction" method="supprimerClient">
    </action>

    <action name="lister" class="presentation.AdminAction" method="listerClients">
    </action>

</package>

form.jsp

<s:form method="post">

<s:textfield name="nom" label="Nom"></s:textfield>
<s:textfield name="prenom" label="prenom"></s:textfield>
<s:textfield name="cin" label="cin"></s:textfield>
<s:textfield name="login" label="login"></s:textfield>
<s:textfield name="password" label="password"></s:textfield>

<s:submit value="Ajouter Client" action="admin/ajouter"></s:submit>
<s:submit value="Lister les clients" action="admin/lister"></s:submit>

</s:form>

点击 "ajouter client" 按钮时的实际错误

Error HTTP 404 - There is no Action mapped for namespace /login and action name admin/ajouter.

我想将单击 "ajouter client" 按钮时的 url 从“http://localhost:8080/GestionCommandes/login/verifier.action”更改为 “http://localhost:8080/GestionCommandes/admin/ajouter.action

有什么办法可以实现吗?

在 struts 表单标签中,您应该使用 namespaceaction 属性。除非在 struts.xml.

中配置,否则不要在操作名称中使用斜杠
<s:form namespace="/admin" action="ajouter" method="post">

  <s:textfield name="nom" label="Nom"></s:textfield>
  <s:textfield name="prenom" label="prenom"></s:textfield>
  <s:textfield name="cin" label="cin"></s:textfield>
  <s:textfield name="login" label="login"></s:textfield>
  <s:textfield name="password" label="password"></s:textfield>

  <s:submit value="Ajouter Client"></s:submit>
  <s:submit value="Lister les clients" action="lister"></s:submit>
</s:form>

注意,要在struts submit tag you should enable the action prefix for the parameter with action name. See this答案中使用action属性进行详细解释。