1

次のことを行う必要があります。

  1. ユーザーがログインします。
  2. ようこそ画面にリダイレクトされました。
  3. 多くのレコードが読み込まれている間、ようこそ画面を見ます。
  4. 作業画面にリダイレクトされます。

私は Action クラスで次のようなことをする方法を探しています:

public class LinkAction extends ActionSupport implements SessionAware {
        @Autowired
        private ServiceDelegate myService;

    public String welcome()
        {
            new Runnable() {
                @Override
                public void run() {
                    myService.getLoadsOfData();

                    //redirect to the next action

                }
            }.run();
            // this is where the user 
            // goes to look at the welcome screen        
            return "welcome";
        }
    }

それは間違ったアプローチかもしれません。もしそうなら教えてください。私はStrutsの初心者です。

4

2 に答える 2

1

正しい方法は、コメントで AleksandrM によって既に提案されている方法です。ページを開き、ajax アクションを呼び出している間にインジケーターを表示し (便宜上、jQuery としましょう)、結果をレンダリングしてインジケーターを削除します。思ったより簡単です:

public class MainAction extends ActionSupport {    
    public String execute() {
        return SUCCESS;
    }
}
public class AjaxAction extends ActionSupport {    
    @Autowired
    private ServiceDelegate myService;

    private Stuff myStuff; // with getter

    public String execute() {
        myStuff = myService.loadLongStuff();
        return SUCCESS;
    }
}

AJAX アクションは、JSON データ、JSP スニペット、またはバイナリ データのストリームのいずれかを返すことができます。お好きな方法をお選びください。たとえば、AjaxAction の SUCCESS を JSP スニペットにマップすると、JSP スニペットは次のようになります。

ajaxSnippet.jsp

<%@ taglib prefix="s" uri="/WEB-INF/struts-tags.tld" %>
Stuff: <s:property value="myStuff" />

次に、main.jsp で、AJAX 呼び出しの結果で上書きする div にインジケーターを表示します。

main.jsp

<body>
    <div id="main">          
        <img src="/images/mesmerizingProgressBar.gif" />
    </div>    

    <script>
        $(function(){ // onDocumentReady...
            $.ajax({ // call ajax action...
                type : 'GET',
                url : '/ajaxAction.action', 
                success : function(data,textStatus,jqXHR){
                    // then render your result in "main" div, 
                    // overwriting the loading GIF
                    $("#main").html(data); 
                },
                error : function(jqXHR, textStatus, errorThrown){
                    $("#main").html("Error ! " + textStatus); 
                }
            });
        });
    </script>
</body>
于 2015-02-02T11:15:40.263 に答える
0

AJAXのアイデアをありがとう。

しかし、私が探していた答えは、実際には Struts インターセプター「execAndWait」でした。私は既存のアプリケーションを扱っており、すべての Struts 配管が整っているため、AJAX で使用することにしました。これはこれに関するStrutsガイドです

于 2015-02-03T15:14:08.623 に答える