TextArea中的多行输出与JSP

时间:2011-06-18 16:15:42

标签: html 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>

2 个答案:

答案 0 :(得分: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会根据<c:forEach>之前的.jsp源文件中的缩进在第一个条目之前放置空格,因此如果您不想要,则必须在左边排列所有内容这一点。

如果我不得不这么做,我会写一个我自己的EL附加功能来回显一个字符串,后跟CRLF。

编辑 - 如果你想写一个EL插件,你需要两件事:

  • 函数本身,应该是某个类的public static方法。我为我的大多数人开了一个名为“ELFunctions”的课程。你可以任意方式安排它们。
  • “.tld”文件,如果您还没有。它应该最终在你的webapp“WEB-INF”下的某个地方。我进入一个名为“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太烦人了。)现在你可能已经有了一个小文件,可以为你的页面提供taglib(至少为<c:...>标签)。在那里,或在任何页面的顶部,添加如下所示的行:

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

认为 JSP运行时通过查看WEB-INF子树和WEB-INF / lib中的.jar文件来搜索“.tld”文件,并通过“uri”进行匹配串。无论如何,一旦你完成了,你可以在JSP文件中说:

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

它会调用你的功能。

答案 1 :(得分: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>