2011-06-18 9 views
1

TestArea行に余分なスペースを入れずにリストを表示するにはどうすればよいですか?すなわち:ここJSPを使用したTextArea内の複数行出力

this 
that 
the 
other 

は私の試みです:

<div class="text"> 
    <label for="output_string">Output:</label> ` 
    <textarea rows="10" cols="20"> 
     <c:forEach var="x" items="${messagelist}">${x}</c:forEach> 
    </textarea> 
</div> 

答えて

1

はここに(私は自分のページのいずれかにちょうど秒で試してみるよ)の推測です:

<c:forEach var='x' items='${messagelist}'><c:out value='${x}\r\n'/></c:forEach> 

編集 —いいえ、まったく動作しないようです。私はこのようなメッセージカタログエントリを追加するためしかし、どのような仕事をしたことだった。

linebreak={0}\r\n 

その後、あなたは改行で終わる文字列を生成するために<fmt:message key="linebreak"><fmt:param value="${x}"/></fmt:message>を使用することができます。

JSPはより前の.jspソースファイルのインデントに従って最初のエントリの前にスペースを入れますので、必要がない場合はすべての行を左端に並べる必要があります。

私はこれをたくさんしなければならない場合は、私自身のELアドオン関数を書いて、CRLFに続く文字列をエコーバックします。あなたはELアドオンを書きたい場合、あなたは二つのことを必要とする —

編集:

  • 機能自体、いくつかのクラスのpublic static方法であるべきです。私はほとんどの私のために "ELFunctions"と呼ばれるクラスを守っています。あなたはあなたが好きな方法でそれらを整理することができます。
  • ".tld"ファイルがない場合は、これをファイルに追加します。それは "WEB-INF"の下のあなたのwebappに終わるはずです。 Mineは "tld"というサブディレクトリに入っていますが、どこにでも置くことができます。

だから、あなたには、いくつかのクラスでは、このような小さな機能を記述します。

public static String linebreak(final String msg) { 
    return msg + "\r\n"; 
} 

次に、あなたの「.TLD」ファイルは、それはあなたが持っている唯一のものだと仮定すると(このようになります。もしあなたは)既存の「.TLD」ファイルを持っているだけで句を追加します。

<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0"> 
    <description>Your Favorite Description</description> 
    <display-name>Make Something Up</display-name> 
    <tlib-version>4.0</tlib-version> 
    <short-name>whatever</short-name> 
    <uri>http://yourdomain.com/tld/whatever</uri> 

    <function> 
    <description> 
     Return a string augmented with trailing line break (CR - LF pair) 
    </description> 
    <name>linebreak</name> 
    <function-class>your.package.name.YourClass</function-class> 
    <function-signature> 
     java.lang.String linebreak(java.lang.String) 
    </function-signature> 
    </function> 

は(ボーイ、XMLはとても迷惑です)今、どこかで、あなたはおそらくすでに(あなたのページのタグライブラリに引っ張る小さなファイルを持っている<c:...>ため少なくともタグ)。そこに、または任意のページの上部に、このような行を追加します。

<%@ taglib prefix="whatever" uri='http://yourdomain.com/tld/tango' %> 

私は、WEB-INFサブツリーを通して見ることにより、「.TLD」ファイルのためのそのJSPランタイム検索を考えると、中WEB-INF/lib内の.jarファイルを、その "uri"文字列でマッチングします。とにかくこれをやったら、JSPファイルで次のように言うことができます:

<c:forEach var='x' items='${messagelist}'>${whatever:linebreak(x)}</c:forEach> 

あなたの関数が呼び出されます。

+0

メッセージCatolog Entry?これはWeb.xmlに追加されていますか? –

+1

いいえ、ResourceBundleとしてアクセスされる.propertiesファイルです。私は使用しているフレームワークのためにそれを持っている "贅沢"を持っていますが、私はあなたがそれを動作させるために何をしなければならないか正確にはわかりません。私はファイルがあなたのビルドを介してCLASSPATHに終わらなければならないことを知っています。私の木の中で、彼らは "classes"ディレクトリのルートに行きます。 – Pointy

+1

メッセージ・カタログで作業していない場合は、EL関数を追加するほうがずっと簡単です。実際には、あなたが望むならば、リスト全体を吐き出すEL関数を書くことができます。私は私の答えに追加します。 – Pointy

0
<c:set var="xv"></c:set> 
<c:forEach items="${messagelist}" var="x"> 
    <c:if test="${not empty x}"> 
    <c:choose> 
     <c:when test="${idx.first}"><c:set var="xv" value="${x}"></c:set></c:when> 
     <c:otherwise><c:set var="xv" value="${xv},${x}"></c:set></c:otherwise> 
    </c:choose> 
    </c:if> 
</c:forEach> 
<textarea cols="45" rows="5">${xv}</textarea> 
関連する問題