私はJSPページに渡されるBeanオブジェクトのリストを持っており、その1つはコメント・フィールドです。このフィールドに改行が含まれていて、JSTLを使ってセミコロンに置き換えて、フィールドをテキスト入力に表示できるようにします。私は1つの解決策を見つけましたが、それほどエレガントではありません。私は可能性として以下に投稿します。JSPとJSTLを使用して改行文字を置き換えるにはどうすればよいですか?
答えて
ここに私が見つけた解決策があります。しかし、それほどエレガントではありません。
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<% pageContext.setAttribute("newLineChar", "\n"); %>
${fn:replace(item.comments, newLineChar, "; ")}
fn:replaceを使用して実行できるはずです。
あなたは次の宣言を使用してJSPにタグライブラリをインポートする必要があります。
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
次にあなたがセミコロンで$ {データ}内の改行の発生を交換するには、次の式を使用することができます。
${fn:replace(data, "\n", ";")}
ドキュメントはこのような点では素晴らしいものではなく、テストする機会はありませんでした。
私はこれが私が最初に試したことであり、それはうまくいかないと確信しています。私は本当にそれを再テストする時間はありませんが、私は間違っているかもしれません。 – parkerfath
この回答は私のものとほとんど同じですが(下記参照)、追加のpageContext.setAttribute()はありません。この余分なメソッドを呼び出す必要があるように私が設定していない設定があるかどうか知っていますか? – parkerfath
このエラーが発生しました: org.apache.jasper.JasperException:/WEB-INF/jsp/team/alarms.jsp(11,2) "$ {fn:replace(blob、" \ n "、"; ") } "は無効な式が含まれています:javax.servlet.jsp.el.ELException:[" INTEGER_LITERAL "、
置き換えを行う独自のJSP関数を書くことができます。
これは、あなたのようなもので終わるだろう意味:
ns
は、ユーザーが定義した名前空間接頭辞であると
replace
があなたのJSP機能である
<%@ taglib prefix="ns" uri="..." %>
...
${ns:replace(data)}
。
これらの関数は実装が非常に簡単です(静的メソッドです)。ただし、現時点でこれらの関数を記述するための参考にはなりません。
独自のJSP関数を作成できます。 http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JSPTags6.html
これはおおよそ実行する必要があります。
タグライブラリ記述子ファイルを作成します
/src/META-INF/sf.tld
<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.0" 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">
<tlib-version>1.0</tlib-version>
<short-name>sf</short-name>
<uri>http://www.stackoverflow.com</uri>
<function>
<name>clean</name>
<function-class>com.stackoverflow.web.tag.function.TagUtils</function-class>
<function-signature>
java.lang.String clean(java.lang.String)
</function-signature>
</function>
</taglib>
機能ロジック用のJavaクラスを作成します。
com.stackoverflow.web.tag.function.TagUtilsあなたのJSPで
package com.stackoverflow.web.tag.function;
import javax.servlet.jsp.tagext.TagSupport;
public class TagUtils extends TagSupport {
public static String clean(String comment) {
return comment.replaceAll("\n", "; ");
}
}
次の方法であなたの機能にアクセスすることができます。
<%@ taglib prefix="sf" uri="http://www.stackoverflow.com"%>
${sf:clean(item.comments)}
は$ {sf:clean(item .comments)} ...私はこのソリューションを使用しました。スクリプトレットよりもきれいに見えます – danb
ありがとうdanb、私は私のポストを更新しました – Geekygecko
@danb:あなたは私の答えを忘れましたか?http://stackoverflow.com/questions/58054/how- can-i-replace-newline-characters-using-jsp-and-jstl/1690942#1690942 – BalusC
varを設定しているときに、値を二重引用符で囲んでEnterキーを押します。
$ {FN:置き換え(データ、newLineCharは、 ";")}
このソリューションでは、PageContextの属性を直接設定された独自のソリューションよりもエレガントです。ところで
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<c:set var="newLine" value="\n"/>
${fn:replace(data, newLine, "; ")}
:あなたはこのため<c:set>
タグを使用する必要があります${fn:replace(data, "\n", ";")}
は動作しません。
\ nはEL式の改行文字を表しません。
改行文字にpageContext
属性を設定し、それをJSTLのfn:replace
関数で使用するソリューションが動作します。
はしかし、私はこの問題を解決するために、ジャカルタの文字列]タブライブラリを使用することを好む:
<%@ taglib prefix="str" uri="http://jakarta.apache.org/taglibs/string-1.1" %>
...
<str:replace var="result" replace="~n" with=";" newlineToken="~n">
Text containing newlines
</str:replace>
...
あなたはnewlineTokenのために欲しいものは何でも使用することができます。 "〜n"は私が置き換えを行っているテキストに現れそうにないので、私にとっては合理的な選択でした。
これは私のために動作しません:
<c:set var="newline" value="\n"/>
${fn:replace(data, newLine, "; ")}
これが行われます。
<% pageContext.setAttribute("newLineChar", "\n"); %>
${fn:replace(item.comments, newLineChar, "; ")}
これは上記の答えです。たぶん、回答を繰り返すのではなく、すでに与えられた答えをコメントしたり、アップアップしたりするほうがよいでしょう。 – parkerfath
私は同じ問題を抱えていますが、この解決済みの鉱山、ありがとう、なぜ最初のものがうまくいかないのですか? –
@parkerfathこの回答の上位ランクのバージョンは、c:setまたはインラインバージョンが頻繁に黙って失敗することを警告しません。 – LateralFractal
ちょうど;
で\n
を置き換えるためにfn:replace()
関数を使用します。その後、(あなたがTomcatの、TomEEは、JBossなどの代わりに、GlassFishの、ペーシュ・カショーロ、WildFlyは、WebSphereなどを使用しているとき、すなわち)あなたがApacheのEL実装の代わりに、OracleのELのリファレンス実装を使用している場合は
${fn:replace(data, '\n', ';')}
、バックスラッシュを再エスケープする必要があります。レコードの
${fn:replace(data, '\\n', ';')}
この問題に取り組んでいる間、私はこの記事に出くわした:
をJSTLで複数行の文字列をテキストエリアのタイトル属性として追加されます。 Javascriptはこれをテキストエリアのデフォルトテキストとして追加します。このテキストをクリアするには、タイトルと同じ値にする必要がありますが、多くのテキストエディタは\ nの代わりに\ r \ nを置くので失敗します。だから、follownig不要な\ rを取り除くます:
<% pageContext.setAttribute("newLineChar", "\r"); %>
<c:set var="textAreaDefault" value="${fn:replace(textAreaDefault, newLineChar, '')}" />
より簡単に:あなたが本当に必要なものならば
<str:replace var="your_Var_replaced" replace="\n" with="Your ney caracter" newlineToken="\n">${your_Var_to_replaced}</str:replace>
あなたはhereからアドバイスを使用することができます\ n個のシンボルである:
${fn:replace(text, "
", "<br/>")}
または
<c:set var="nl" value="
" /><%-- this is a new line --%>
これには、文字列リテラルの新しい行が含まれます。
これは(むしろELよりも改行を表現するためにJavaを使用しているため)受け入れ答えに似ていますが、ここで< C:セット/ >要素は、属性を設定するために使用されます。
<c:set var="newline" value="<%= \"\n\" %>" />
${fn:replace(myAddress, newline, "<br />")}
次のスニペットも動作しますが、< Cの2行目は:
<c:set var="newline" value="
" /><!--this line can't be indented -->
${fn:replace(myAddress, newline, "<br />")}
素晴らしい!私は理由を知らないが、受け入れられた答えがうまくいかない。なぜなのかご存知ですか? –
最初のスニペットは私のために働いた。ありがとう! –
これはJSP ELのための有効なソリューションです::/ >要素をインデントすることができません(と醜い場合があります)を設定
"${fn:split(string1, Character.valueOf(10))}"
- 1. Pythonを使用してHTMLエスケープ文字を置き換えるにはどうすればよいですか?
- 2. 改行/改行をjavascriptのスペースで置き換えるにはどうすればよいですか?
- 3. XSLT/FOで文字をグラフィック(絵文字)に置き換えるにはどうすればよいですか?
- 4. RegExp Replaceを使用して文章を置き換えるにはどうすればよいですか?
- 5. 単語の文字間の単語以外の文字をRegExに置き換えて置き換えるにはどうすればよいですか?
- 6. 改行をタブ文字で置き換える方法は?
- 7. bash変数の改行文字を置き換えますか?
- 8. 文字列のUnicode文字をPythonに置き換えるにはどうすればいいですか?
- 9. Javaの文字列の文字を置き換えるにはどうすればいいですか?
- 10. JavaScript文字列置換メソッドを使用して '+'記号を置き換えるにはどうすればよいですか?
- 11. regexとjavascriptを使用して区切られた文字列の各フィールド区切り文字(たとえばカンマをセミコロンに置き換える)を置き換えるにはどうすればよいですか?
- 12. sedを使用してスペースをカンマに置き換えるにはどうすればよいですか?
- 13. PHPを使用してスペースをキャリッジリターンに置き換えるにはどうすればよいですか?
- 14. VBAでFileSystemObjectを使用してテキストファイルの行に文字列を置き換えるにはどうすればよいですか?
- 15. C#文字列を取得して、改行でNULLを置き換えます。
- 16. PySparkで文字列値をNULLに置き換えるにはどうすればよいですか?
- 17. javascriptで特殊文字をregexに置き換えるにはどうすればよいですか?
- 18. C#で文字列内のスペースをアンダースコアに置き換えるにはどうすればよいですか?
- 19. 正規表現を使用してカッコで置き換えるにはどうすればよいですか?
- 20. JSON NSStringの改行文字を置き換えます。
- 21. WordPressの検索クエリで文字を置き換えるにはどうすればよいですか?
- 22. データフレーム内の値をRの文字列に置き換えるにはどうすればよいですか?
- 23. OAuthを使用してフェデレーションログイン用のOpenIDを置き換えるにはどうすればいいですか?
- 24. javascriptを使用して二重引用符をエスケープ文字の二重引用符に置き換えるにはどうすればよいですか?
- 25. 文字列内の複数の項目を置き換えるにはどうすればよいですか?
- 26. jQueryを使用してグリッドをリストビューに置き換えるにはどうすればいいですか?
- 27. Intellij IDEAでテキストを新しい行に置き換えるにはどうすればよいですか?
- 28. javascriptを使用して改行をスペースで置き換えてください
- 29. URLのすべての特殊文字を、Javaの正規表現を使用して置き換えるにはどうすればよいですか?
- 30. テキストファイル内の行を検索して置き換えるにはどうすればよいですか?
これは私自身の答えですが、私はこれを受け入れています。なぜなら、これは最も単純で実際に動作することがわかっているからです。 – parkerfath
これは不要です。ちょうどバックスラッシュをエスケープ:http://stackoverflow.com/questions/58054/how-can-i-replace-newline-characters-using-jsp-and-jstl/1690942#1690942 – BalusC
私はバックスラッシュをエスケープしようとしましたが、どちらもうまくいきません。 pageContext属性を設定する上記の私の方法は、私がそれを働かせる唯一の方法です。 BalusCが述べているように、あなたはより簡単な方法のいくつかに恵まれているかもしれません。おそらくすべてのオプションがここにあるのは良いですね。 – parkerfath