2016-02-07 1 views
0

У меня есть что-то вроде этого:Stringtemplate - использовать условные выражения, не добавляя новые строки для вывода, и все еще держать шаблоны разборчивыми?

properties(attributeInfo) ::= << 
private <attributeInfo:parameters()>; 

>> 

parameters(attributeInfo) ::= << 
<if(attributeInfo.struct||attributeInfo.array)><attributeInfo:paramComposite()><else><javaTypeNameMap.(attributeInfo.typeName)> <attributeInfo.propertyName><endif> 
>> 

Это производит желаемый результат:

private com.terradatum.common.db.model.terradatum.MlsAgentIdObj agentObj; 
private String officeName; 
private String officeAddress; 
private String officeCity; 
private String officeState; 
private String officeZipcode; 
private MlsPhoneTbl phoneTbl; 
private String agentEmail; 
private String agentAddress; 
private String agentCity; 
private String agentState; 
private String agentZipcode; 

Когда я изменить parameters subtemplate на следующее:

parameters(attributeInfo) ::= << 
<if(attributeInfo.struct||attributeInfo.array)><attributeInfo:paramComposite()> 
<else><javaTypeNameMap.(attributeInfo.typeName)> <attributeInfo.propertyName> 
<endif> 
>> 

Шаблон более разборчивыми , но выход теперь включает в себя символы новой строки:

private com.terradatum.common.db.model.terradatum.MlsAgentIdObj agentObj 
; 
private String officeName 
; 
private String officeAddress 
; 
private String officeCity 
; 
private String officeState 
; 
private String officeZipcode 
; 
private MlsPhoneTbl phoneTbl 
; 
private String agentEmail 
; 
private String agentAddress 
; 
private String agentCity 
; 
private String agentState 
; 
private String agentZipcode 
; 

Я смущен этим поведением - на основе того, что я понял о том, как условно включать подтемы и поведение условных обозначений WRT для строк новой строки, две формы подтемы parameters должны давать одинаковый вывод.

Очевидно, что мое понимание неверное, поэтому я надеюсь, что кто-то даст мне некоторое руководство.

ответ

1

Try:

parameters(attributeInfo) ::= <% 
<if(attributeInfo.struct||attributeInfo.array> 
    <attributeInfo:paramComposite()> 
<else><javaTypeNameMap.(attributeInfo.typeName)> 
    <attributeInfo.propertyName> 
<endif> 
%> 

<% ...%> позволяет StringTemplate игнорировать отделяя белое пространство. << ...>> игнорирует только верхние и конечные символы новой строки.

В некоторых случаях вызов функции trim может помочь.

+0

Это было самым сложным трюком - это все еще что-то сложное, но определенно более разборчивое. – rbellamy

Смежные вопросы