我正在尝试创建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为空。
任何人都可以向我解释原因和解决方法
提前致谢
答案 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了。