3

名前空間、アクション、および 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

また、登録リンクも表示されますが、壊れています。同様の投稿を見ましたが、回答の主な目標は、名前空間と構文の問題を確認することでした。私は Struts 2 のスターターですが、コードにその問題は見られませんでした。間違った方法で使用している可能性があります。

4

3 に答える 3

3

問題は、アクションをそれぞれの名前空間にマッピングしていました

HTMLフォームタグで、アクションはログインであり、名前空間は歓迎されると述べています。このような、

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

しかし、名前空間にマップされたパッケージによると、welcomeというアクションはありませんがlogin、別のパッケージで利用可能でした。ログイン アクションをコピーしてウェルカム パッケージに貼り付けるか、ウェルカム パッケージ内に login という名前の新しいアクションを作成するだけです。

于 2015-03-02T10:14:24.763 に答える
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>

アンカー タグは、アクション名と名前空間を使用して、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>
于 2015-03-02T11:41:11.287 に答える
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>

type="redirect" を使用して他のアクションにリダイレクトしますが、index.jsp にリダイレクトしています

于 2015-03-02T09:31:06.310 に答える