使用Spring web-flow中的链接在Web流中进行数据传输

时间:2013-10-24 06:04:04

标签: java spring jsp spring-webflow

我正在尝试创建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为空。

任何人都可以向我解释原因和解决方法

提前致谢

2 个答案:

答案 0 :(得分:2)

那是因为表格无处提交 将Form标记更改为:

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

它会起作用。

顺便说一下,你不应该像这样使用URL传递参数,最好用_flowExecutionKey做同样的事情:

<form action="${flowExecutionUrl}" method="post"> 
<input type="hidden" name="_eventId" value="loginCredentialsEntered" /> 
...

答案 1 :(得分:1)

如果您用锚点替换按钮,那么您不再提交表单了吗?点击该链接不会发送loginName参数 - 因为它没有提交表单。

如果您想用链接替换按钮,那么当您点击链接时,您需要使用Javascript提交表单。

为表单命名:

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

并将链接修改为:

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

或者,更好的解决方案是离开按钮并使用CSS将其设置为更像链接。然后就不需要Javascript了。