How to bind complex types in play-framework 2.0

后端 未结 2 981
佛祖请我去吃肉
佛祖请我去吃肉 2020-12-25 08:41

I have a model class in the following structure:

public class User {
   public String name;
   public Long id;
}

public class Play {
   public String name;
         


        
相关标签:
2条回答
  • 2020-12-25 09:24

    You can make use of custom DataBinder In the play.scla.html:

    @form (routes.PlayController.update()) 
    {
      <input type="hidden" name="user" id="user" value="@play.user.id"/>
    }
    

    in your method in the controller

    public static Result update()
    {
      // add a formatter which takes you field and convert it to the proper object
      // this will be called automatically when you call bindFromRequest()
    
      Formatters.register(User.class, new Formatters.SimpleFormatter<User>(){
        @Override
        public User parse(String input, Locale arg1) throws ParseException {
          // here I extract It from the DB
          User user = User.find.byId(new Long(input));
          return user;
        }
    
        @Override
        public String print(User user, Locale arg1) {
          return user.id.toString();
        }
      });
      Form<Play> formPlay = form(Play.class).bindFromRequest();
      Play playObj = formPlay.get();
    }
    
    0 讨论(0)
  • 2020-12-25 09:38

    I'm not quite sure I understand your question, but basically I have been handling forms like this:

     final static Form<Play> playForm = form(Play.class);
     ...
     public static Result editPlay(){
         Form<Play> newPlayForm = form(User.class).bindFromRequest();
         Play newPlay = newPlayForm.get();
         ....    
     }
    

    I serve and render the template from an action using:

    return ok(play_form_template.render(playForm));
    

    Then in the template:

     @(playForm: Form[Play])
     @import helper._
    
     @helper.form(action = routes.Application.editPlay()) {
          @helper.inputText(playForm("name"))
          ...
     }
    
    0 讨论(0)
提交回复
热议问题