2017-02-03 1 views
0

Ich erstelle eine Anwendung mit einer Liste von Mitarbeitern. Ein Administrator kann die Liste der Mitarbeiter sehen und ihre Daten ändern. Wenn er auf "Ändern" klickt, sollte das HTML-Formular mit ausgewählten Mitarbeiterdaten gefüllt werden, damit er es ändern kann. Ich habe den Standard-Mechanismus im Spiel-Framework verwendet, aber es funktioniert nicht. Ich war ihm das Debuggen und alles sieht ok (Mitarbeiterdaten gesetzt bilden), aber es nicht auf meinem HTML-Formular anzuzeigen ... Ich habe keine Ahnung, warum ...Formular ausfüllen Spiel Framework scala funktioniert nicht

def loadEmployee(id: Int) = Action { implicit request => 
    val loadedEmployee = EmployeeService.getEmployee(id) 
    val employee = Await.result(loadedEmployee, Duration(5, SECONDS)).get 

    val employees = Await.result(EmployeeService.listAllEmployees, Duration(5, SECONDS)) 

    val form = EmployeeForm.form.fill(EmployeeFormData(employee.name, employee.additionalInformation, employee.resume)) 

    Ok(views.html.index(form,employees)) 
    } 

View file:

@(employeeForm: Form[models.EmployeeFormData],employees : Seq[models.Employee]) 
@main() { 


    <form id="employee-data-form" role="form" action='@routes.ApplicationController.addInformation()' method="post" class="form-horizontal" align="center" autocomplete="off"> 

     <fieldset class="employee-fieldset"> 

      <div class="employee-form"> 
       <label class="form-title" style="color: #F8741B; font-size: 22px;font-weight: bold; text-decoration:none">title</label> 
      </div> 
      <br/> 
      <table align="center" cellspacing="20"> 
       <tr> 
        <td align="left"> 
         <div class="employee-form" id="name_field_label"> 
          <div class="controls col-xs-offset-3 col-xs-9"> 
           <div class="input-group"> 
            <span class="input-group-addon"><span class="glyphicon glyphicon-employee"></span></span> 
            <strong>name</strong> : 
           </div> 
          </div> 
         </div> 
        </td> 
        <td align="center"> 
         <div class="employee-form" id="name_field_value"> 
          <div class="controls col-xs-offset-3 col-xs-9"> 
           <div class="input-group"> 
            <span class="input-group-addon"><span class="glyphicon glyphicon-employee"></span></span>        
            <input type="text" id="name" name="name" value="" placeholder="First Name" class="form-control input-lg" required>         
           </div> 
          </div> 
         </div> 
        </td> 
       </tr> 
       <tr> 
        <td align="left"> 
         <div class="employee-form" id="additionalInformation_field_label"> 
          <div class="controls col-xs-offset-3 col-xs-9"> 
           <div class="input-group"> 
            <span class="input-group-addon"><span class="glyphicon glyphicon-employee"></span></span> 
            <strong>Additional information</strong> : 
           </div> 
          </div> 
         </div> 
        </td> 
        <td align="center"> 
         <div class="employee-form" id="additionalInformation_field_value"> 
          <div class="controls col-xs-offset-3 col-xs-9"> 
           <div class="input-group"> 
            <span class="input-group-addon"><span class="glyphicon glyphicon-employee"></span></span> 
            <textarea rows="4" cols="50" id="additionalInformation" name="additionalInformation" value="" class="form-control input-lg" required></textarea> 
           </div> 
          </div> 
         </div> 
        </td> 
       </tr> 
       <tr> 
        <td align="left"> 
         <div class="employee-form" id="resume_field_label"> 
          <div class="controls col-xs-offset-3 col-xs-9"> 
           <div class="input-group"> 
            <span class="input-group-addon"><span class="glyphicon glyphicon-employee"></span></span> 
            <strong>resume</strong> : 
           </div> 
          </div> 
         </div> 
        </td> 
        <td align="center"> 
         <div class="employee-form" id="resume_field_value"> 
          <div class="controls col-xs-offset-3 col-xs-9"> 
           <div class="input-group"> 
            <span class="input-group-addon"><span class="glyphicon glyphicon-employee"></span></span> 
            <textarea rows="4" cols="50" id="resume" name="resume" class="form-control input-lg" required></textarea> 
           </div> 
          </div> 
         </div> 
        </td> 
       </tr> 

      </table> 
      <br/> 
      <div class="form-actions controls ynt-btn-xlarge"> 
       <button type="submit" class="btn btn-primary ynt-btn-orange">Add</button> 
      </div> 

     </fieldset> 
    </form> 

    <div class="employee-display" > 
     <fieldset> 
      <legend align="center"><h3>Registered Employees</h3></legend> 
      <table cellspacing="20"> 
       <tr> 
        <th>employeeid</th> 
        <th>firstname</th> 
        <th>lastname</th> 
        <th>resume</th> 
       </tr> 
       @for(employee <- employees){ 
        <tr> 
         <td>@employee.id</td> 
         <td>@employee.name</td> 
         <td>@employee.additionalInformation</td> 
         <td>@employee.resume</td> 
         <td><a href="@routes.ApplicationController.deleteEmployee(employee.id)">delete</a></td>  
         <td><a href="@routes.ApplicationController.loadEmployee(employee.id)">loadEmployee</a></td>     
        </tr> 
        } 
      </table> 
     </fieldset> 
    </div> 

}

+1

Ohne den Formularcode können wir nichts dazu sagen. – pedrofurla

+0

@pedrofurla Ich aktualisierte meinen Beitrag – user2455862

+0

Von https://www.playframework.com/documentation/2.5.x/ScalaForms: Forms "... sind rein für die Handhabung der Eingabe und es ist sinnvoll, eine eindeutige Form für einen bestimmten POST zu verwenden . " – pedrofurla

Antwort

0

Ihr Controller-Code OK aussieht - Sie sind fill eine Form[EmployeeFormData] ing und weitergeben zu Ihrer Vorlage. Das Problem ist, Sie nie Ihre employeeForm innerhalb der Vorlage verwenden - es gibt keine Möglichkeit, dass das Formular ausgefüllt werden kann.

Wenn Sie in der Play-Dokumentation für showing forms in a view template nachlesen, werden Sie sehen, dass eine ganze Familie von helper s für diesen Zweck verfügbar ist. In vielen Fällen sind sie fast so einfach zu schreiben wie die von Ihnen verwendete "plain HTML" -Version. Hier ein Beispiel:

Wo Sie hatte:

<div class="input-group"> 
    <span class="input-group-addon"><span class="glyphicon glyphicon-employee"></span></span> 
    <input type="text" id="name" name="name" value="" placeholder="First Name" class="form-control input-lg" required> 
</div> 

Sie brauchen:

<div class="input-group"> 
    <span class="input-group-addon"><span class="glyphicon glyphicon-employee"></span></span> 
    @helper.inputText(
    employeeForm("name"), 
    'id -> "name", 
    'placeholder -> "First Name", 
    'class -> "form-control input-lg", 
    'required -> "true"  
) 
</div> 

Beachten Sie, wie Sie eine beliebige Anzahl von beliebigen Argumente in die generierte HTML passieren kann durch das Vorsetzen mit dem ' Zeichen. Dies kann sehr nützlich sein, wenn Sie zum Beispiel zusätzliche data- Attribute am Eingang setzen möchten.