2015-11-24 3 views
1

У меня есть игра! 2.2, который я обновил до 2,5. Однако с момента обновления у меня возникают проблемы с базой данных, и это выглядит как ошибка конфигурации или упущение. Кажется, что изменения не сохранены, а также формы не работают.Формы в игре! 2.5

я объявляю директиву ebeans в application.conf:

ebean.default= ["models.*"] 

и, конечно, загрузить модуль в plugins.sbt и build.sbt. пример моего кода, у меня есть устройство:

@Entity 
public class Device extends Model { 

    @Id 
    public Long id; 

    @Constraints.Required 
    public String name; 

    @Constraints.Required 
    public String ipAddress; 

    @Constraints.Required 
    public String uniqueId; 

    @OneToMany(mappedBy="device") 
    public List<Sensor> sensors = new ArrayList<>(); 

    @OneToMany(mappedBy="device") 
    public List<Action> actions = new ArrayList<>(); 

    @OneToOne 
    public LogItem latestError; 

    @Version 
    public Timestamp lastUpdate; 

    public boolean debugMode; 

    public boolean statusLed; 

    public static Finder<Long, Device> find = new Finder<Long, Device>(
      Long.class, Device.class 
    ); 

    public List<ValidationError> validate() { 
     /* 
     List<ValidationError> errors = new ArrayList<ValidationError>(); 
     if (User.byEmail(email) != null) { 
      errors.add(new ValidationError("email", "This e-mail is already registered.")); 
     } 
     return errors.isEmpty() ? null : errors; 
     */ 
     return null; 
    } 
} 

Это мой контроллер:

public static Result add() { 
    Form<Device> deviceForm = Form.form(Device.class); 
    return ok(editView.render(deviceForm, null)); 
} 

И этот шаблон:

@(deviceForm: Form[Device], device: Device) 

    @if(deviceForm.hasGlobalErrors) { 
     <ul> 
     @deviceForm.globalErrors.foreach { error => 
      <li>error.message</li> 
     } 
     </ul> 
    } 


    @main("Edit a device") { 

     @if(deviceForm("id").value == "" || deviceForm("id").value == null) { 
      <h2>Add the device</h2> 
     } else { 
      <h2>Update the device</h2> 
     } 

     @helper.form(action = routes.Devices.update()) { 

      @helper.inputText(
       deviceForm("name"), 
       '_label -> "Device name" 
      ) 

      @helper.inputText(
       deviceForm("ipAddress"), 
       '_label -> "IP Address" 
      ) 

      @helper.inputText(
       deviceForm("uniqueId"), 
       '_label -> "Unique ID" 
      ) 

      @helper.checkbox(
       deviceForm("statusLed"), 
       '_label -> "Status light" 
      ) 

      @helper.checkbox(
       deviceForm("debugMode"), 
       '_label -> "Debug mode" 
      ) 

      @if(device != null){ 
      <div>Sensors:</div> 
      <div> 
      <table class="adminTable"> 
      @for(sensor <- device.sensors) { 
       <tr> 
       <td>@sensor.value</td> 
       <td><a href="@routes.Sensors.edit(sensor.id)">edit<a/> | <a href="@routes.Sensors.delete(sensor.id)">delete</a></td> 
       </tr> 
      } 
      </table> 
      </div> 
      } 
      @if(deviceForm("id").value != "" && deviceForm("id").value != null) { <div>Last updated: @device.lastUpdate.format("dd MMM yy - HH:mm:ss")</div> } 
      <div> 
       <input type="hidden" name="id" value="@deviceForm("id").value"> 
       <input type="submit" value="Submit"> 
      </div> 
     } 

     <a href="@routes.Devices.index()">Cancel</a> 
    } 

Когда я заполняю все поля и нажмите «отправить». Я получаю следующую ошибку:

[error] p.c.s.n.PlayDefaultUpstreamHandler - Cannot invoke the action 
java.lang.IllegalStateException: JSR-303 validated property 'name' does not have a corresponding accessor for data binding - check your DataBinder's configuration (bean property versus direct field access) 
    at play.data.Form.bind(Form.java:372) ~[play-java_2.11-2.4.4.jar:2.4.4] 
    at play.data.Form.bindFromRequest(Form.java:222) ~[play-java_2.11-2.4.4.jar:2.4.4] 
    at controllers.Devices.update(Devices.java:44) ~[classes/:na] 
    at router.Routes$$anonfun$routes$1$$anonfun$applyOrElse$4$$anonfun$apply$4.apply(Routes.scala:558) ~[classes/:na] 
    at router.Routes$$anonfun$routes$1$$anonfun$applyOrElse$4$$anonfun$apply$4.apply(Routes.scala:558) ~[classes/:na] 
    at play.core.routing.HandlerInvokerFactory$$anon$4.resultCall(HandlerInvoker.scala:136) ~[play_2.11-2.4.4.jar:2.4.4] 
    at play.core.routing.HandlerInvokerFactory$JavaActionInvokerFactory$$anon$14$$anon$3$$anon$1.invocation(HandlerInvoker.scala:127) ~[play_2.11-2.4.4.jar:2.4.4] 
    at play.core.j.JavaAction$$anon$1.call(JavaAction.scala:70) ~[play_2.11-2.4.4.jar:2.4.4] 
    at play.GlobalSettings$1.call(GlobalSettings.java:67) ~[play_2.11-2.4.4.jar:2.4.4] 
    at play.core.j.JavaAction$$anonfun$7.apply(JavaAction.scala:94) ~[play_2.11-2.4.4.jar:2.4.4] 
Caused by: org.springframework.beans.NotReadablePropertyException: Invalid property 'name' of bean class [models.Device]: Bean property 'name' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter? 
    at org.springframework.beans.BeanWrapperImpl.getPropertyValue(BeanWrapperImpl.java:731) ~[spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
    at org.springframework.beans.BeanWrapperImpl.getPropertyValue(BeanWrapperImpl.java:722) ~[spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
    at org.springframework.validation.AbstractPropertyBindingResult.getActualFieldValue(AbstractPropertyBindingResult.java:99) ~[spring-context-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
    at org.springframework.validation.AbstractBindingResult.rejectValue(AbstractBindingResult.java:108) ~[spring-context-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
    at play.data.Form.bind(Form.java:366) ~[play-java_2.11-2.4.4.jar:2.4.4] 
    at play.data.Form.bindFromRequest(Form.java:222) ~[play-java_2.11-2.4.4.jar:2.4.4] 
    at controllers.Devices.update(Devices.java:44) ~[classes/:na] 
    at router.Routes$$anonfun$routes$1$$anonfun$applyOrElse$4$$anonfun$apply$4.apply(Routes.scala:558) ~[classes/:na] 
    at router.Routes$$anonfun$routes$1$$anonfun$applyOrElse$4$$anonfun$apply$4.apply(Routes.scala:558) ~[classes/:na] 
    at play.core.routing.HandlerInvokerFactory$$anon$4.resultCall(HandlerInvoker.scala:136) ~[play_2.11-2.4.4.jar:2.4.4] 
[error] application - 

У меня также есть заполненная запись, и когда я ее редактирую, поля формы пустые. Тем не менее, отладка показывает, что данные есть, и также появляются «Датчики», которые представляют собой список, созданный из самого объекта.

Поэтому в моей конфигурации в игре должно быть что-то не так! 2.5, но я не могу понять, что.

ответ

1

Кажется, это проблема с кешированием. Использование:

activator clean 
activator clean-files 

и восстановление проекта исправили проблему.