Зачем шаблонам Play Framework доступ к закрытым полям? - PullRequest
0 голосов
/ 15 декабря 2011

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

class Task {
  private String title = "";
}

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

${task.title}

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

Ответы [ 2 ]

2 голосов
/ 15 декабря 2011

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

1 голос
/ 18 декабря 2011

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

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

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


...