Formulários pai / filho ao usar o Playframework com Java
Eu tenho uma entidade "Pergunta" que possui uma "Resposta" que possui uma lista de "Alternativas", conforme abaixo:
public class Question extends BaseEntity {
private String text;
private String sourceCode;
private String complement;
private Answer answer;
}
public class Answer extends BaseEntity{
private List<Alternative> alternatives;
}
Quero criar um formulário para o usuário preencher com uma lista de perguntas. Li tantas perguntas materiais e SO, mas não consigo entender exatamente como fazer com os formulários. Eu sei que posso fazer isso de outra maneira usando DynamicForms, não é isso que eu quero. Minha idéia é que isso poderia ser feito desta maneira:
@(message: String, form: play.data.Form[Question])
@main("cadastrar questão") {
<script src="@routes.Assets.at("javascripts/index.js")"></script>
<div class="page-header">
<h1>@message</h1>
</div>
<body>
<style>
.top-buffer { margin-top:12px ; }
</style>
<div class="container.fluid form-group">
@helper.form(routes.Application.submit()) {
<div class="row top-buffer">
<label for="text">Enunciado:</label>
<textarea id="text" name="text" class="form-control col-md-6" placeholder="Enunciado da questão" rows="5" value="@form("text").value()"></textarea>
</div>
...
<div class="row top-buffer">
<label for="complement">Corretas:</label>
<input type="text" name="correct" class="form-control col-md-6" value="@form("complement.answer.alternatives[0]").value()">
</div>
<div class="row top-buffer">
<div class="row top-buffer">
<input type="submit" class="btn btn-primary col-md-1" value="submit">
</div>
</div>
}
</div>
</body>
}
Mas quando tento usar o objeto Answer e ele "Alternativas", um grandeNullPointerexception
explode no meu rosto:
final Form<Question> questionForm = f.bindFromRequest();
final Question question = questionForm.get();
System.out.println(question);
System.out.println(question.getText());
System.out.println(question.getSourceCode());
System.out.println(question.getComplement());
//Nullpointer here:
final List<Alternative> alternatives =
question.getAnswer().getAlternatives();
alternatives.forEach(p -> System.out.println(p));
Sinto falta de mais documentação e exemplos sobre isso e outras coisas relacionadas. Mesmo o site oficial não fornece exemplos extensos. Especialmente quando se lida com Java. Isso dá uma idéia de que a estrutura está se tornando obsoleta ou sendo ultrapassada por outras tecnologias?
Eu uso a versão 2.4.6 do Play.