2

我有一个自定义组件,其中包含两个不同的文本对话框选项卡 text1 和 text2。通常,您使用 输出<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

使用大卫建议设置变量 text2,

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

您将需要在 if 语句中更改您的条件,因为您所拥有的永远是正确的。

解释:

如果属性存在 text2 将获取属性的字符串值,包括空字符串或仅包含空格的字符串。如果该属性不存在,则将 text2 设置为默认的空字符串。在 Java 中,空字符串不为空,因此 if 语句中的条件将始终为真。更好的检查是:

<%
  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

第二个参数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 %>
<%  
  }
%>

它只是修剪文本并检查它是否为空。如果您按照上面的建议(以及此处所述)更改第二个参数,您也可以删除空检查。

于 2013-09-09T09:15:13.287 回答