2012-11-15 57 views
1

因此,我目前正試圖弄清楚,如果提供的數據模型不包含該值,那麼是否仍有freemarker標記。我知道${VALUE!"DEFAULTVALUE"},但這不適用於FreeMarker標記。如果值爲空,則保留FreeMarker標記

從本質上講,我試圖做的是沿着線的東西:

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

如果數據模型設置爲以下幾點:

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

當這適用於Template對象,因爲測試未定義而引發null錯誤。我試圖讓發生的事情是,如果TEST是不確定的,模板仍應加工成以下幾種:

${TEST}ONETWO 

有沒有辦法做到在FreeMarker庫使用這個功能?我可以用模式匹配來做到這一點,但必須有一個更簡單的方法。

謝謝。

回答

2

嘗試使用?has_contentTEST,也許這將有所幫助。但我不確定,如果這符合您的要求。

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

你說得對,我會再試一次 –