でlist.contains文字列を評価します仕事はありません。は私が私が試した特定の値は、JSP</p> <p>に存在している場合は値がリストに保存されている要素を非表示にする必要がありJSTL
リストにJSTLの値が含まれているかどうかを評価するには、リストと値が文字列である必要があります。
でlist.contains文字列を評価します仕事はありません。は私が私が試した特定の値は、JSP</p> <p>に存在している場合は値がリストに保存されている要素を非表示にする必要がありJSTL
リストにJSTLの値が含まれているかどうかを評価するには、リストと値が文字列である必要があります。
悲しいことに、私はJSTLがこれを理解するためにすべての要素を通して何かを繰り返すことをサポートしていないと思います。過去には、私は、コアタグライブラリ内のforEachメソッドを使用しました:これが実行さ
<c:set var="contains" value="false" />
<c:forEach var="item" items="${myList}">
<c:if test="${item eq myValue}">
<c:set var="contains" value="true" />
</c:if>
</c:forEach>
後はmyListがmyValueが含まれている場合、$ {含まれている}が「真」に等しくなります。
は、リストが小さければうまく動作します。このようにするには、パフォーマンスコストがあることだけを認識してください。 – Chii
ええ、もしあなたが十分に高くなったら、それがあります。私は10-20のコレクションのためにそれを使用しており、パフォーマンスの問題は発生していません。私が思うに悪いことは、JSTLの行数です。それでも、これは自分のTLDを設定することなく唯一の方法だと思います(これはあまり難しくなく、価値があるかもしれません)。 –
これをチェックするための組み込み機能はありません。リストと項目をとる独自のtld関数を作成し、リストのcontains()メソッドを呼び出します。例えば
//in your own WEB-INF/custom-functions.tld file add this
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<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 http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0"
>
<tlib-version>1.0</tlib-version>
<function>
<name>contains</name>
<function-class>com.Yourclass</function-class>
<function-signature>boolean contains(java.util.List,java.lang.Object)
</function-signature>
</function>
</taglib>
次に、Yourclassという名前のクラスを作成し、上記の署名付きのcontainsという静的メソッドを追加します。
package com; // just to illustrate how to represent the package in the tld
public class Yourclass {
public static boolean contains(List list, Object o) {
return list.contains(o);
}
}
次に、あなたがあなたのJSPで使用することができます:
<%@ taglib uri="/WEB-INF/custom-functions.tld" prefix="fn" %>
<c:if test="${ fn:contains(mylist, myValue) }">style='display:none;'</c:if>
タグは、サイト内の任意のJSPから使用することができます私は、そのメソッドの実装はかなり自明です確信しています。
編集:TLDファイルに関する詳細情報 - more info here
次はあなたの質問への答えよりも回避策の詳細ですが、それはあなたが探しているものかもしれません。 リストの代わりにマップに値を入れることができれば、それはあなたの問題を解決するでしょう。ただ、これを行うための別の方法は、あなたのオブジェクトを表すキーと値のペアを持つMap (HashMap)
を使用している${mymap.myValue}
構文は でなければなりません
をnull以外の値に自分の価値観をマッピングし、この<c:if test="${mymap.myValue ne null}">style='display:none;'</c:if>
を行うか、あなたもstyle='display:none;
にマッピングすることができますし、単に出力。ペアはマップ
<c:if test="${fn:contains(task.subscribers, customer)}">
これが私のために正常に動作して存在する場合JSTL
<c:if test="${not empty map[1]}">
で
Map<Long, Object> map = new HashMap<Long, Object>();
map.put(new Long(1), "one");
map.put(new Long(2), "two");
は、これはtrueを返す必要があります。
これは、両方の要素を文字列に変換した後でチェックしています。リストは文字列に変換され、要素ごとにチェックされません。 trueの場合、customer = "one"(2回一致) false for customer = "three"(一致しない) 顧客= "twenty"(これはあなたが見ているものではない)の真実 – rmarimon
rmarimonの警告を知っているので、この答えは私の正確なユースケースにマッチしました。 – CodeReaper
あなたは春のフレームワークを使用している場合は、春のTagLibのとSPELを使用することができます。
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
---
<spring:eval var="containsValue" expression="mylist.contains(myValue)" />
<c:if test="${containsValue}">style='display:none;'</c:if>
あなたがfn:contains()
かfn:containsIgnoreCase()
機能を使用する必要があります。
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
...
<c:if test="${not fn:containsIgnoreCase(mylist, 'apple')}">
<p>Doesn't contain 'apple'</p>
</c:if>
または
<c:if test="${not fn:contains(mylist, 'Apple')}">
<p>Contains 'Apple'</p>
</c:if>
@BalusC 1)答えがSOFであるという回答はありません。 2)あなたの投票前に考えてください、この答えは正しいです。私は答えを提供する前にこれをテストしました。私はそれをさらに明確にするために答えを更新しました。 – tkr
@BalusC私は繰り返さないで、私はただの答えを提供しています。私は読者にもフィードをスプーンしたくありません。私はそれがSOの全体のポイントだと思う。それで、私たちはまだ受け入れられた答えがあるかどうかという質問に答えることができます。あなたのためにセーションをしませんか?また、私はあなたの下院議員を尊重します。なぜなら、私は100人以上の議員がいることを理解しているからです。あなたが答えを閉じたいならば、優しく投票を開いてください。 – tkr
(2009年12月にリリースされたサーブレット3.0/JSP 2.2の一部としてもたらされる)EL 2.2以降intentedとして与えられた構文が動作することに注意してください。 – BalusC
[JSTLセットとリスト - アイテムがセット内に存在するかどうかをチェックする]の重複可能性(http://stackoverflow.com/questions/1076679/jstl-sets-and-lists-checking-if-item-exists-in-a -set) –