struts2jquery插件设置表单目标



如何将<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 targetss:form target,都没用!

我不想使用s:submit,因为表单验证必须通过Ajax完成。

把它放在表单上,而不是提交标签上:

<s:form action = "login-process-result" 
     namespace = "/security" 
            id = "loginForm" 
        target = "_top" >

但你确定这就是你想要的吗?看看target="_top"是如何工作的。

根据你的描述,我不这么认为。

我不知道你为什么需要这样的行为。

我所能想象的,只是通过Ajax使用struts2-jquery插件更新页面的特定部分,以提交表单&获取响应并将其推送到DOM中。

以下是您可以做的:

  1. 通过ajax提交表单
  2. 在服务器端进行验证
  3. 将返回的响应填入页面的所需区域

为了使用Struts2Jquery插件实现这一点,您可以使用onCompleteTopics&sj:submitonErrorTopics

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 validationtarget的概念,我使用了以下解决方案:

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>

最新更新