不使用<cq:text> </cq:text>访问自定义组件中的文本

时间:2013-03-01 16:53:28

标签: java adobe cq5

我有一个自定义组件,其中包含两个不同的文本对话框选项卡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的文本变量是否可以像上面那样在本地引用?

3 个答案:

答案 0 :(得分:6)

使用David建议设置变量text2,

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

你需要在if语句中改变你的条件,因为你所拥有的将永远是真实的。

说明:

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

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

如果text2不为null,则仅返回true,不是空字符串或仅包含空格字符的字符串。 org.apache.commons.lang3在CQ5中提供。

答案 1 :(得分:1)

properties.get()的第二个参数是默认值,而不是类。所以试试这个:

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

答案 2 :(得分:0)

这将有效:

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

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