2

我有一个 Struts2 表单,它包含在页面上的 DIV 覆盖中。当我提交此表单时,我希望它隐藏/显示表单底部的隐藏文本区域,让用户知道表单已提交。从那里,用户可以关闭覆盖并返回他们的工作。我在完成此操作时遇到问题。在我退货时,如果我没有在退货中提供另一页,则该页面将重定向到空白页SUCCESSNONE如何提交表单并保持在同一页面内而完全不重定向?

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

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

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

4

2 回答 2

3

你需要的是:AJAX

在 Struts2 中,您可以使用Struts2-Dojo Plugin<sx:div>(自 Struts 2.1 起已弃用,但仍然存在并工作)开箱即用地实现它。

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

但是,如果您使用的是最新版本的 Struts2,您可以使用Struts2-jQuery Plugin轻松实现这一点,并且您也可以在其 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 获取 id 并更改href属性。

于 2013-01-28T22:39:07.920 回答
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>

动作类 public class 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');

我希望,我已经消除了你的疑问。

于 2013-01-28T22:53:59.897 回答