2017-04-12 7 views
0

私は説明できない奇妙な問題があります。私はプレーフレームワークを使用しています。下のビューを実行しようとすると、下のフォームアクションを繰り返すときにのみ動作します...動作しますが、正しくはないことが分かります。誰かが説明や訂正を助けることができれば感謝しています。Scala Playフォーム

@(errorMessage: String = "")(implicit messages: Messages) 

@helper.form(routes.ApplicationHomeController.login) { 
    @main(title = messages("single.title")) { 
     <link href="http://fonts.googleapis.com/css?family=Open+Sans:400,700" rel="stylesheet" type="text/css"> 
     <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 
     <div id="userbox"> 
      <form action="@{routes.ApplicationController.doLogin()}" method="post"></form> 

      <form action="@{routes.ApplicationController.doLogin()}" method="post"> 
       <div style="color: red">@errorMessage</div> 
       <h1 id="logintxt" style="background-color: rgb(11, 146, 9); 
          background-position: initial; 
          background-repeat: initial;">Driver Service <b>ß</b>eta</h1> 

       <div id="submit_giff" style="display: none;"> 
        <hi> Authenticating: <img src="/assets/images/loader-bar.gif" align="absmiddle"> </hi> 
       </div> 
       <input id="name" name="userName" placeholder="Username" style="opacity: 1; 
          background-color: rgb(255, 255, 255); 
          background-position: initial; 
          background-repeat: initial;"> 
       <input id="pass" name="password" type="password" placeholder="Password" style="opacity: 1; 
          background-color: rgb(255, 255, 255); 
          background-position: initial; 
          background-repeat: initial;"> 

       <p id="namealert" style="display: none; 
          opacity: 1;">Username:</p> 
       <p id="passal" style="display: none; 
          opacity: 1;">Password:</p> 
       <input id="loginbtn" style="opacity: 0.2; 
          cursor: default;" type="submit" value="Login"> 
      </form> 
     </div> 
     <script src="/assets/javascripts/login.js"></script> 
    } 
} 

答えて

2

2つの直接の観察。

1つ:@helper.form(...)は、最終的に生成されるHTMLに<form>要素を書き込みます。あなたのビューには他のリテラル<form>が入れられています。最初のフォームです。 Nested forms are invalid HTML。あるフォームがroutes.ApplicationController.doLoginに、もう1つのフォームがroutes.ApplicationController.loginに送信されています。ブラウザが実際に提出するのは誰が知っていますか?ネストされたフォームは無効であるため、実際には予測できません。

2つ:@main(...)ビューがネストされています@helper.form(...)です。あなたのメインビューには<html>...</html>が含まれていると仮定します。これは、<form>要素で始まるの内部にある<html>要素であるHTMLになります。これはあまりにも無効なマークアップです。

私の推測では、これらの問題のいずれかまたは両方が問題です。

生成されたHTMLを取り出し、https://validator.nu/のようなHTMLバリデーターを通して実行してみてください。バリデーターが見つけた問題を修正し、フォームをネストしないで、ログインフォームが実際に提出するルートを決定します。

関連する問題