我有一个自定义组件,其中包含两个不同的文本对话框选项卡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的文本变量是否可以像上面那样在本地引用?
答案 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所述),您也可以删除空检查。