2

text1 と text2 という 2 つの異なるテキスト ダイアログ タブを含むカスタム コンポーネントがあります。通常は を使用して出力しますが、出力<cq:text property="text" tagClass="text" />する前に text2 にコンテンツが含まれているかどうかを判断する必要があります。だから私はそれを最初にローカル変数に割り当てようとしています。

<%
 String text2 = properties.get("text2", String.class);
%>
<cq:text property="text1" tagClass="text" />
<%
  if (text2 != null) {
    out.println(text2);
  }
%>

ただし、次のエラーが表示されます: text2 を解決できません

この変数への何らかのタイプの参照がありませんか? または、上記のように、par ベースのテキスト変数をローカルで参照できないようにすることはできますか?

4

3 に答える 3

6

Davidが提案するものを使用して、変数text2を設定します。

<%
  String text2 = properties.get("text2", "");
%>

あなたが持っているものは常に真実であるため、ifステートメントで条件を変更する必要があります。

説明:

プロパティが存在する場合、text2は、空の文字列または空白のみの文字列を含むプロパティの文字列値を取得します。プロパティが存在しない場合は、text2をデフォルトの空の文字列に設定しています。Javaでは、空の文字列はnullではないため、ifステートメントの条件は常にtrueになります。より良いチェックは次のようになります。

<%
  if (org.apache.commons.lang3.StringUtils.isNotBlank(text2)) {
    out.println(text2);
  }
%>

これは、text2がnullでない場合、または空白文字のみを含む文字列でない場合にのみtrueを返します。org.apache.commons.lang3はCQ5で提供されます。

于 2013-03-01T20:40:53.400 に答える
1

の 2 番目の引数properties.get()は、クラスではなくデフォルト値です。だからこれを試してください:

<%
 String text2 = properties.get("text2", "");
%>
于 2013-03-01T17:10:28.723 に答える
0

これはうまくいきます:

<%
 String text2 = properties.get("text2", String.class);
%>
<cq:text property="text1" tagClass="text" />
<%
  if (text2 != null && !("".equals(text2.trim()))) {
%>
   <%= text2 %>
<%  
  }
%>

テキストをトリミングして、空かどうかをチェックするだけです。上記のように (およびここで説明されているように) 2 番目のパラメーターを変更すると、null チェックを削除することもできます。

于 2013-09-09T09:15:13.287 に答える