如何将<sj:submit>
的目标设置为顶部。
作为一个示例登录页面,在ajax基础验证结束后应该打开新的:
<s:form id="loginForm" action="login-process-result" namespace="/security" >
<sj:submit button="true"
validateFunction="formValidator" validate="true" key="form.btn.login />
</s:form>
我试过sj:submit targets
和s:form target
,都没用!
我不想使用s:submit
,因为表单验证必须通过Ajax完成。
把它放在表单上,而不是提交标签上:
<s:form action = "login-process-result"
namespace = "/security"
id = "loginForm"
target = "_top" >
但你确定这就是你想要的吗?看看target="_top"
是如何工作的。
根据你的描述,我不这么认为。
我不知道你为什么需要这样的行为。
我所能想象的,只是通过Ajax使用struts2-jquery插件更新页面的特定部分,以提交表单&获取响应并将其推送到DOM中。
以下是您可以做的:
- 通过ajax提交表单
- 在服务器端进行验证
- 将返回的响应填入页面的所需区域
为了使用Struts2Jquery插件实现这一点,您可以使用onCompleteTopics
&sj:submit
的onErrorTopics
JSP
<s:form action="myAction">
<!-- form elements -->
<sj:submit onCompleteTopics="success" onErrorTopics="error"/>
</s:form>
Javascript
$.subscribe('success',function(event){
var responseText=event.originalEvent.responseText;
});
上面是未经测试的代码,但我相信它解释了如何处理手头的问题。
为了遵循结构2jquery ajax validation
和target
的概念,我使用了以下解决方案:
login-form.jsp(未设置目标):
<s:form id="loginForm" action="login-process-result" namespace="/security" >
<sj:submit button="true"
validateFunction="formValidator" validate="true" key="form.btn.login />
</s:form>
行动(带验证)
@Action(value = "login-process-result")
@Validations(requiredStrings={
@RequiredStringValidator(fieldName="userID",key="validate.required"),
@RequiredStringValidator(fieldName="password",key="validate.required")} )
public String result() throws ClientException{
//Authentication login goes here
return SUCCESS;
}
最后,实现这一技巧的结果表单是一个普通的jsp,它通过javascript 更改窗口位置
该页面显示一条成功消息,并在更改url之前进行小延迟,url是可选的,可以删除。
<%@ page contentType="text/html; charset=utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
You have logged in successfully ....
<br/>
<img src="images/loggin-in-progress.gif" />
<s:url var="url" action="private-page" namespace="/"/>
<script type="text/javascript">
function reload() {
window.location.href = "${url}";
}
$(document).ready(function() {
setTimeout('reload()', 800);
});
</script>