提交Struts 2表单而不更改页面?

时间:2013-01-28 22:30:20

标签: jsp struts2

我有一个Struts2表单,它包含在页面上的DIV覆盖中。当我提交此表单时,我希望它隐藏/显示表单底部的隐藏文本区域,只是让用户知道表单已提交。用户可以从那里关闭叠加层并返回其工作。我遇到了一个问题。在我返回SUCCESSNONE页面后,如果我在回复中没有提供其他页面,则该页面将重定向到空白页面。如何在不重定向的情况下提交表单并保持在同一页面内?

目前我正在使用JavaScript提交表单

document.forms['formName'].submit(); 

我使用JavaScript而不是<s:submit/>选项,因为在表单提交之前需要在表单上设置其他参数。

2 个答案:

答案 0 :(得分:3)

您需要的是:AJAX

在Struts2中,您可以使用<sx:div>(自Struts 2.1以来已弃用,但仍在此处工作)Struts2-Dojo Plugin即可实现开箱即用。

基本上,您使用dojo主题来定位div,而Action的结果(包含HTML / JSP片段的JSP文件)将填充div而不重新加载页面。

但是如果您使用的是Struts2的最新版本,则可以使用Struts2-jQuery Plugin轻松实现此目的,并且您可以在its Showcase中找到代码的所有工作示例。

这是一个例子:

<s:url id="ajax" value="/ajax1.action"/>
<sj:div href="%{ajax}" indicator="indicator">
       <img id="indicator" src="images/indicator.gif" 
            alt="Loading..."    style="display:none"/>
</sj:div>

非常简单:)

如果你需要在运行时设置参数,你显然可以用href更改javascript属性...只需按id和alter href属性获取id。

答案 1 :(得分:0)

您需要使用 Ajax调用 。 请看下面的例子,

Struts.xml配置:

    

    <action name="**ActionName**" class="**Actionclass**"   method="**Method-calling**">
        <result type="stream">
            <param name="contentType">text/html</param>
            <param name="inputName">inputStream</param>
        </result>
        <result name="input">/Error.jsp</result>
    </action>
</package>

操作类 公共类 ActionClass 扩展了ActionSupport {     private InputStream inputStream;

public String **Method-calling()** 
{
    //Calling Business Logic
            if(Business logic check condition)
                 {
         inputStream=new StringBufferInputStream("return x");               
                 }
    else
         {
         inputStream=new StringBufferInputStream("return y");
         }
    return SUCCESS;
}

public InputStream getInputStream() 
{
    return inputStream;
}
public String execute() 
{
    return SUCCESS;
}

}

Html文件 Ajax调用示例

jQuery('***#replace-with-tag-id***').on('***blur(can  be any action)***', function() {
    var varE = jQuery('***#replace-with-tag-id***').val();
        jQuery.ajax({
            method:"GET",
            url: "***Actoin-name-struts.xml***.action", //"callAJax.action",
            data: "email="+varEmail,
            success: function(data) 
                                    {
                if(""+data == "return x") 
                                    {
                                    alert("x has been returned");
                } 
                                else 
                                    {
                                    alert("y has been returned");
                }
            },
            error: function(XMLHttpRequest, textStatus, errorThrown){
                alert('Error=' + textStatus);
                alert("errorThrown"+errorThrown);
                alert("response text = "+XMLHttpRequest.responseText);
            }

        });
    } 
}).trigger('blur');

我希望,我已经清除了你的怀疑。