0

Javaクラスからの文字列またはリストとしての戻り値の型を持つさまざまな文字列操作メソッドを使用するWebアプリケーションを開発しています。これらのメソッドをサーブレットで呼び出し、JSTL を使用して、出力を JSP ページに正常に出力できます。したがって、JSTL 構文や基本的なサーブレットと JSP の相互作用に問題はありません。次に例を示します。

これらすべての機能を持つ私の基本クラス:

public class MethodClass {
// Skipping unwanted code and only providing example
    public static List<String> method1 (String input) {
         // Returns List of Strings
    }
    public static String method2 (String input) {
        // Returns a string
    }
    public static void method3 (String input) {
       // This method has to print text on console. I can't redirect that to a String.
       System.out.println(input);
    }
}

以下は私のサーブレットコードです(関連するスニペットのみ)

            listMethod1 = MethodClass.method1(input);
            request.setAttribute("Myresults", listMethod1);
            request.getRequestDispatcher("/results.jsp").forward(request, response);

私のJSPでは、次のものを使用しています。

<c:forEach items="${Myresults}" var="result">       
    <tr>
        <td>${result.frameNum}</td>
        <td>${result.number}</td>
        <td>${result.name}</td>
        <td>${result.length}</td>
    </tr>
</c:forEach>

これまでのところ問題はありません。私の質問は、method3 からの出力をテキスト領域に出力する方法です。私の知る限り、response.getWriter() の out.println 関数を使用して、特定の JSP ファイルのテキスト領域やテキスト ボックスなどの特定のフィールドに印刷するための準備をせずに、JSP に直接印刷できます。コンソールに出力する void メソッドの出力を String に何らかの方法でリダイレクトし、上記の例と同様にその String を使用して出力を表示できる、従うことができる他のアプローチはありますか。

4

1 に答える 1

0

トリックを見つけたと思います。ありがとう、stackOverflow。

リンクは次のとおりです。javaのコンソール出力を文字列にリダイレクトします

私が使用した関連コードスニペットは次のとおりです。

// Create a stream to hold the output
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(baos);
// IMPORTANT: Save the old System.out!
PrintStream old = System.out;
// Tell Java to use your special stream
System.setOut(ps);
// Print some output: goes to your special stream
System.out.println("Foofoofoo!");
// Put things back
System.out.flush();
System.setOut(old);
// Show what happened
System.out.println("Here: " + baos.toString());

これで、System.out の出力を文字列として保存し、JSTL を使用して通常どおり JSP で使用できるようになりました。

于 2013-11-03T13:31:27.343 に答える