2013-03-01 1 views
2

두 개의 별개의 텍스트 대화 탭 인 text1과 text2가 포함 된 사용자 지정 구성 요소가 있습니다. 일반적으로 <cq:text property="text" tagClass="text" />을 사용하여 출력하지만 출력하기 전에 text2에 내용이 포함되어 있는지 확인해야합니다. 그래서 먼저 로컬 변수에 할당하려고합니다.사용하지 않고 사용자 지정 구성 요소에서 텍스트에 액세스 <cq:text>

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

그러나, 나는 오류가 발생합니다 : 텍스트 2 내가이 변수를 참조하여 어떤 종류의 실종

해결 될 수없는 이유는 무엇입니까? 또는 par 기반 텍스트 변수를 위와 같이 로컬에서 참조 할 수 없습니까?

답변

1

properties.get()의 두 번째 인수는 클래스가 아니라 기본값입니다. 그래서이 시도 :

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

아니요, 같은 오류가 발생했습니다. –

+0

내 환경에서 코드 버전을 시도했는데 제대로 작동합니다. 여러분의 코드가 실제로'text2'의 정의와 그 사용 사이에 닫는 중괄호를 가지고있을 수 있습니까? –

+0

당신이 옳았습니다. 나는 우연히'if' 문 안에 선언을했습니다. 감사! –

6

다윗이 변수 텍스트 2를 설정 제안 무엇을 사용하여, 당신은 항상 참이 될 것입니다 무슨과 같이 if 문에 조건을 변경해야합니다

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

.

는 설명 : 속성이 텍스트 2 만 공백의 빈 문자열 또는 문자열을 포함하는 속성의 문자열 값을 얻을 것이다 존재

합니다. 속성이 없으면 text2를 빈 문자열의 기본값으로 설정합니다. Java에서 빈 문자열은 null이 아니므로 if 문의 조건은 항상 true입니다. 더 좋은 검사는 다음과 같습니다 널 (null) 텍스트 2가 아닌 경우

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

이것은 단지 빈 문자열 또는 공백 만의 문자와 문자열이 아닌 true를 돌려줍니다. org.apache.commons.lang3은 CQ5에서 제공됩니다.

+0

실제로'if (text2.length()> 0)', 텍스트 에디터 기반 변수에서는 null 검사가 작동하지 않습니다. 위의 기능이 동일합니까? –

+0

StringUtils.isNotBlank (String)는 null 공백 (길이 == 0) 및 공백 만 문자열 ie ("")를 확인합니다. 빈 공간을 표시하지 않으려는 경우 더욱 견고합니다. – kfaerber

+0

알아야 할 뛰어난 지식! –

0

이 작동합니다 : 비어 있다면

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

는 그냥 텍스트와 검사를 트림. 위에서 제안한대로 (그리고 설명 된대로 here) 두 번째 매개 변수를 변경하면 null 검사를 제거 할 수도 있습니다.

관련 문제