0

我正在尝试创建 Spring Web 流应用程序。我有以下情况:

流1.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>

注册.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 为空。

谁能解释一下原因和解决方法

提前致谢

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