0

Spring Web フロー アプリケーションを作成しようとしています。次の状況があります。

flow1.xml

<var name="user" class="com.test.User" />

<view-state id="signup" model="user">
    <transition on="loginCredentialsEntered" to="lookupUser" />
</view-state>

 <decision-state id="lookupUser">
    <if test="myActionBean.lookupUser(user)"
        then="userRegistered" else="registerUser" />
</decision-state>

signup.jsp:

<html xmlns:form="http://www.springframework.org/tags/form">
<body>
    <form action="&_eventId=loginCredentialsEntered" method="post"> 
        <input type="hidden" name="_flowExecutionKey" value=""/>
        <table>
            <tr>
                <td>Login Name:</td>
                <td><input type="text" name="loginName"/></td>
            </tr>
         </table>
        <input type="submit" value="Login" />
    </form>
</body>
</html>

メソッド myActionBean.lookupUser(user) 内で、フォームに入力された user.loginName が渡されていることがわかります。

ただし、ボタンの代わりにリンクを使用してフォームを送信すると

<a href="${flowExecutionUrl}&_eventId=loginCredentialsEntered">Login</a>

user.loginName が null であることがわかります。

理由と回避策を誰か教えてくれませんか

前もって感謝します

4

2 に答える 2

2

これは、フォームがどこにも送信されないためです。タグを次
のように変更します。Form

<form action="${flowExecutionUrl}&_eventId=loginCredentialsEntered" 
                                                         method="post"> 

そしてそれはうまくいくでしょう。

ところで、このように URL を使用してパラメータを渡すべきではありません_flowExecutionKey

<form action="${flowExecutionUrl}" method="post"> 
<input type="hidden" name="_eventId" value="loginCredentialsEntered" /> 
...
于 2013-10-24T06:11:31.070 に答える
1

ボタンをアンカーに置き換えると、フォームを送信しなくなりますか? リンクをクリックしてもloginNameパラメーターは送信されません。フォームを送信していないためです。

ボタンをリンクに置き換えたい場合は、リンクをクリックしたときに Javascript を使用してフォームを送信する必要があります。

フォームに名前を付けます:

<form name="myForm" action="${flowExecutionUrl}&_eventId=loginCredentialsEntered" 
                                                         method="post"> 

リンクを次のように変更します。

<a href="#" onclick="document.myForm.submit();">Login</a>

別の方法として、ボタンをそのままにして、CSS を使用してリンクのようにスタイルを設定することをお勧めします。そうすれば、Javascript は必要ありません。

于 2013-10-24T09:26:35.993 に答える