2012-10-10 1 views
0

StringTemplate 4 wiki에 따르면 expr 속성을 표시 할 수 있어야하지만 그렇지 않습니다. jython과 함께 StringTemplate4를 사용하고 있습니다.StringTemplate-4 : expr 속성을 렌더링 할 수 없습니다.

test(persons, person) ::= << 
<table> 
    <tr><th>Name</th><th>Age</th></tr> 
    <tr><td>$person.name$</td><td>$person.age$</td></tr> 
    $persons:{p|<tr><td>$p.name$</td><td>$p.age$</td></tr>}$ 
</table> 

가 여기 내 자이 썬 코드입니다 :

여기 내 템플릿 파일, test.st입니다. 템플릿을 렌더링하려고하면 이름과 나이 값이 표시되지 않습니다.

>>> import org.stringtemplate.v4 as st 
>>> 
>>> class Person: 
...  def __init__(self, name, age): 
...   self.name = name 
...   self.age = age 
... 
>>> group = st.STGroupDir('~/template', '$', '$') 
>>> tmpl = group.getInstanceOf('test') 
>>> 
>>> tmpl.add('persons', [Person('jim', 25), Person('sam', 46)]) 
/test() 
>>> tmpl.add('person', Person('bob', 55)) 
/test() 
>>> 
>>> print tmpl.render() 
<table> 
    <tr><th>Name</th><th>Age</th></tr> 
    <tr><td></td><td></td></tr> 
    <tr><td></td><td></td></tr><tr><td></td><td></td></tr> 
</table> 

해석기에서 tmpl의 속성에 액세스 할 수 있습니다.

>>> tmpl.attributes 
{person=<__main__.Person instance at 0x54>, persons=[<__main__.Person instance at 0x55>, <__main__.Person instance at 0x56>]} 
>>> p = tmpl.getAttribute('person')  
>>> print p.name, p.age 
bob 55 
>>> for p in tmpl.getAttribute('persons'): 
...  print p.name, p.age 
... 
jim 25 
sam 46 

이것이 작동하지 않는 이유는 무엇입니까? 내가 뭔가 잘못하고 있는거야? 나는 행운없이 Person 클래스를위한 getName()과 getAge() 메소드를 생성 해 보았다. 데이터 집계를 만들면 속성에 잘 액세스 할 수 있습니다.

답변

0

자바에서는 이러한 속성이 공개되지 않았기 때문입니다. Jython은 필드에 대한 액세스를 어떻게 처리합니까?

+0

이러한 클래스 변수는 public입니다. 자이 썬에서는 private 변수 앞에 두 개의 밑줄이 추가됩니다 (예 : __varname). 여기에 expalanation : [링크] (http://www.ibm.com/developerworks/java/tutorials/j-jython2/section2.html#phidvar) – MD6380

+0

아. 인터프리터 .getObjectProperty() 메서드에서 중지 할 경우 디버거에서 알려주는 것 같습니다. 리플렉션을 사용하여 사물을 꺼내려고 개체로 들어갑니다. 나는 자이 썬에 대해 전혀 몰라서 불일치가 무엇인지 잘 모르겠다. 규칙이 무엇인지 알아 내면 자이 썬 개체를 탐지 할 때 항상 뭔가를 추가 할 수 있습니다. 감사! –

관련 문제