2012-11-15 3 views
1

제공된 데이터 모델에 해당 값이 포함되어 있지 않으면 freemarker 마크 업을 유지할 수 있는지 여부를 알아 내려고 노력 중입니다. 나는 ${VALUE!"DEFAULTVALUE"}에 대해 알고 있지만 FreeMarker 마크 업에서는 작동하지 않습니다. 이것이 적용되면값이 null 인 경우 FreeMarker 마크 업 유지

Map root = new HashMap(); 
root.put("1","ONE"); 
root.put("2","TWO"); 

을 : 데이터 모델은 다음과 같이 설정되어있는 경우

${TEST}${1}${2} 

:

기본적으로, 난 할 노력하고있어의 라인을 따라 뭔가입니다 테스트 개체가 정의되지 않았기 때문에 Template 개체 인 경우 null 오류가 발생합니다.

${TEST}ONETWO 

FreeMarker 라이브러리를 사용하여이 기능을 할 수있는 방법이 있나요 : TEST가 정의되지 않은 경우, 템플릿은 여전히 ​​다음에 처리해야 내가 일이 얻으려고하는 것은 무엇입니까? 패턴 매칭으로이 작업을 수행 할 수 있지만 더 쉬운 방법이 있어야합니다.

감사합니다.

답변

2

TEST?has_content을 사용해보세요. 아마도 도움이 될 것입니다. 그러나 귀하의 요구 사항에 맞는 경우 확실하지 않습니다.

0

FreeMarker 라이브러리를 사용하면 사용자 정의 예외 처리기를 작성할 수 있습니다.

FreeMarker는 실패한 정확한 토큰을 제공하지 않지만 오류 메시지에서 해결할 수 있습니다.

 cfg.setTemplateExceptionHandler(new TemplateExceptionHandler() { 
     @Override 
     public void handleTemplateException(TemplateException te, Environment e, Writer writer) throws TemplateException { 
      try { 
       String errorString = te.getFTLInstructionStack(); 
       int startIndex = errorString.indexOf('$'); 

       if (startIndex != -1) { 
        int endIndex = errorString.indexOf('}', startIndex); 
        if (endIndex != -1) { 
         writer.write(errorString.substring(startIndex, endIndex + 1)); 
        } 
        else { 
         throw te; 
        } 
       } 
       else { 
        throw te; 
       } 
      } 
      catch (IOException ex) { 
       ex.printStackTrace(); 
      } 
     } 
    }); 
+1

답변은 유용하지만 질문에 답하지 않습니다. – aalku

+0

네가 맞아, 다시 해봐. –