0

私は JSP+Java+Html で作業してきましたが、for サイクルで out.print() 関数に問題が発生しました。私の関数getGeneAvailableTaxonomies()は (タイプの) 整数のリストを返し、List<Integer>これらの数値をインターフェイスに出力したいと考えています。

これが私のコードです:

 for(Integer i : ApplicationExtender.getApplicationExtender(application).getGeneAvailableTaxonomies()) 
        {
          out.print(String.format("<option value=\"%1$d\">%2$s</option>", i, TaxonId.getOrganismFromId(i)));
        }

doce%1$dは i 整数値を%2$s表し、もう一方のパラメーターであるタクソノミー ID 値を文字列として表す必要があります。

しかし、残念ながら、これは次のように表示されます。

ここに画像の説明を入力

私は次のようなものを見たいと思っていますが:

ここに画像の説明を入力

私の out.print() 関数呼び出しで確かにエラーがあります...しかし、何が問題なのですか?

どうもありがとう

4

3 に答える 3

1

フォーマット文字列に「$」は必要ありません。ご存知かもしれませんが、スクリプトレットの使用は、Java Web 開発を行うのに適した方法ではありません。JSP で Java コードとマークアップを混在させないため、JSTL を使用する方がはるかに優れていると思います。

編集:前に述べたように、 printf メソッドはoutオブジェクトに存在しません。JspWriter と JspWriter は PrintWriter (printf を持つ) から継承されていないためです。ごめん。だから、これを試してみてください(私にとってはうまくいきました)。

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
        <select>
            <%
                String[] strings = new String[]{ "aaa", "bbb", "ccc", "ddd" };

                for ( int i = 0; i < strings.length; i++ ) {
                    out.print( String.format( "<option value='%d'>%s</option>", i, strings[i] ) );
                }
            %>
        </select>
    </body>
</html>

サーブレットのように PrintWriter を使用する場合は、次のようにします。

<%@page import="java.io.PrintWriter"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
        <select>
            <%
                PrintWriter writer = new PrintWriter( out );
                String[] strings = new String[]{ "aaa", "bbb", "ccc", "ddd" };

                for ( int i = 0; i < strings.length; i++ ) {
                    writer.printf( "<option value='%d'>%s</option>", i, strings[i] );
                }
            %>
        </select>
    </body>
</html>
于 2012-07-23T15:02:20.077 に答える
0

私が理解している限りこれを試してください:

        String option = "<option value=\""+d+"\">"+s+"</option>";    
        out.print(option);

使用してString.format

out.print(String.format("<option value=\"%d\">%s</option>", i, TaxonId.getOrganismFromId(i)));

TaxonID.getOrganismFromId(i)戻っ てきたコメントで言及したように更新intされたので、元のコード%2$sに変更が1つだけあります%2$d...

out.print(String.format("<option value=\"%1$d\">%2$d</option>", i, TaxonId.getOrganismFromId(i)));
于 2012-07-23T14:55:35.547 に答える
0

print/formatコードを http://ideone.com/u8fDT で実行すると問題ないようです。おそらく、JSP を再コンパイルする必要があるだけです (おそらく自動的に行われるはずですが、サーバーの再起動が必要になる場合もあります)。

また、このように HTML と Java コードを混在させるのは、かなり骨の折れる作業です。JSTL または FreeMarker のようなテンプレート システムを使用すると、作業が楽になります。

于 2012-07-23T15:02:22.760 に答える