2011-12-15 2 views
0

У меня есть класс с полем private и подозревается, что шаблон не смог получить к нему доступ без метода getX, но значение отображается так, как если бы оно было public.Зачем использовать шаблоны шаблонов для доступа к закрытым полям?

class Task { 
    private String title = ""; 
} 

Шаблон может отображать title со следующим кодом:

${task.title} 

Я думаю, что это из-за отражения магии, но она не должна быть невозможно вынести частные поля без добытчика?

ответ

1

Рамка делает генерировать сеттеров и добытчик только для общественных полех, но как язык шаблона Groovy и Groovy, кажется, не имеет инкапсуляции, не-доступным поле можно получить без каких-либо ограничений со стороны шаблона код.

Я сообщил об ошибке, но я действительно не уверен, что это можно исправить, потому что Play 1.x реле на Groovy для своих шаблонов (для предстоящей версии 2.0 игра переключится на Scala в качестве языка для шаблонов).

Если вам действительно нужно ограничить доступ, вы должны посмотреть SecurityManager. Они могут предотвратить отражение частных полей, но я не знаю, насколько точно вы можете настроить ограничения.


2

Я предполагаю, что структура динамически добавляет методы getter и setter. Попробуйте создать метод String getTitle(), который возвращает «переопределить», и вы точно это знаете.

+0

'GetTitle()' вызывается метод, так что кажется, что воспроизведение генерации добытчиками автоматически. Но [документация] (http://www.playframework.org/documentation/1.2.4/model#properties) говорит, что это будет сделано только для любого открытого, нестатического, не конечного поля класса. – deamon