2017-11-30 8 views
0

이전에 본 적이 없으므로 도움을 요청하고 있습니다.양식을 제출할 때 Play Framework POST 경로가 실행되지 않습니다.

나는 그것을위한 POST 경로를 시작하지 않을 제출 버튼이있는 간단한 하나의 필드 형식을 가지고 있습니다. 이 코드는 며칠 전에 작동했지만 지금은 계속해서 GET 라우트를 실행합니다. POST 경로와 호출하는 함수에 결코 도달하지 않으므로 오류가 없습니다. ,

public Result ptpCreate() { 
      // Set some needed values... 
      List<Lookup> lookups = Lookup.find.all(); 
      List<User> users = User.find.all(); 
      // Sort the lists... 
      AppGlobals sortThis = new AppGlobals(); 
      Collections.sort(users, sortThis.new sortUsers()); 
      Collections.sort(lookups, sortThis.new sortLookups()); 
      return ok(adult1.render(form(PTPForm.class), lookups, users)); 
    } 

public Result ptpSave() { 
     Form<PTPForm> ptpEntry = form(PTPForm.class).bindFromRequest(); 

     if (ptpEntry.hasErrors()) { 
      List<Lookup> lookups = Lookup.find.all(); 
      List<User> users = User.find.all(); 
      Logger.debug("Save ptp - errors"); 
      // Sort the lists... 
      AppGlobals sortThis = new AppGlobals(); 
      Collections.sort(users, sortThis.new sortUsers()); 
      Collections.sort(lookups, sortThis.new sortLookups()); 
      return badRequest(adult1.render(ptpEntry, lookups, users)); 
     } 

     String userkey = AccessMiddleware.getSessionUserKey(); 
     User user = null; 
     user = User.findByUserKey(userkey); 

     // Save the PTP record.... 
     PTP ptp = new PTP(); 
     PTPForm ptpForm = ptpEntry.get(); 

     ptp.setLegacy_Provider_Id(ptpForm.legacy_Provider_Id); 

     ptp.save(); 

     return ok(ptpcreated.render(ptp.getPtpkey())); 
    } 

나는 계속 버튼을 클릭하면 :

여기
@(ptpForm: Form[Application.PTPForm], lookups: java.util.List[Lookup], users: java.util.List[User]) 

@main(null) { 

    <section id="ptpCreated"> 
     <form class="formoid-solid-dark" 
      style="background-color: #FFFFFF; font-size: 14px; font-family: 'Trebuchet MS', 'Roboto', Arial, Helvetica, sans-serif; color: #34495E; max-width: 480px; min-width: 150px" 
      method="get" action=""> 
      <div class="title"> 
       <h3>Success</h3> 
      </div> 
      <div class="element-number" title="This is the eight-digit Provider ID number that you used for this setting in the portal maintained by Xerox. You may have had different Provider IDs for different services, settings, and/or waivers. Cannot be blank - numbers only"> 
       <label class="title"><span class="required">* Legacy Provider Id...</span></label> 
       <div class="item-cont"><input type="text" name="legacy_Provider_Id" class='allow_numeric' required="required" min="1" max="99999999" maxlength="8" placeholder=""/><span class="icon-place"></span></div> 
      </div> 
      <div class="submit"> 
       <input type="submit" value="Continue" /> 
      </div> 
      <!-- This is needed for bottom shadow to appear... --> 
      <div></div> 
     </form> 
    </section> 

} 

컨트롤러의 기능은 다음과 같습니다 여기 형태입니다

GET /createptp  controllers.Application.ptpCreate() 
POST /createptp  controllers.Application.ptpSave() 

:

여기 경로입니다 그냥 ptpCreate() 함수로 돌아가고 POST 경로도 신경 쓸 필요가 없습니다.

저는 행운이없는 cleancompile을 수행했습니다.

<form action>action="@routes.Application.ptpSave()"으로 변경해 보았습니다.

추적 할 오류가 없으므로이 코드는 완전히 손실됩니다.

+0

시도해 볼 수있는 한 가지 방법은 브라우저 개발 도구 (FF의 네트워크 탭)를 사용하는 것입니다. 게시물 요청을 제출하면 어떻게됩니까? 어떤 반응을 보이고 있습니까? – jrook

+1

또한'form' 태그에서'method = "get"action = "">'을 제거하고 적절한 행동 경로를 대신 사용하십시오. – jrook

+0

'

' 태그를 처음부터 다시 쓰고 이제 작동 중입니다. 왜 이것을 제거하고 다시 쓰는 것이 좋을지 확실하지 않습니다. 이제 작동합니다. – Dan

답변

1

@jrook에서 언급했듯이 <form> 태그가 POST 메서드를 사용하는지 확인해야합니다. 귀하의 질문에 표시된 바와 같이 <form>method="get"입니다.

경로를 보면 GET /createptpcontrollers.Application.ptpCreate()으로, POST /createptpcontrollers.Application.ptpSave()으로갑니다. 둘 다 동일한 URL을 가지므로 요청을 보내는 데 사용 된 방법이 매우 중요합니다.

action="@controllers.routes.Application.ptpSave()"을 사용할 때 controllers.Application.ptpSave() 대신 controllers.Application.ptpCreate()으로 갈 수 있도록 GET 요청을 보내고 있습니다.

해결 방법은 controllers.Application.ptpSave()으로 라우팅하려면 method="POST"을 사용하는 것입니다.

다른 방법은 양식 템플릿 도우미를 사용하여 역순으로 올바른 방법과 동작을 렌더링하는 것입니다. 예 : @helper.form(action = controllers.routes.Application.ptpSave()) { ... }. 그러면 <form method="GET" action="/createptp">...</form>이 렌더링됩니다. 참조 : https://www.playframework.com/documentation/2.6.x/JavaFormHelpers#Creating-a-%3Cform%3E-tag. 수동으로 작동 확인 /createptp에 POST 요청을 보낼 말림

  1. 사용 : 앞으로

    이 사용 같은 두 가지 기술을 뭔가를 디버깅 할 수 있습니다.

  2. 브라우저의 개발자 도구를 사용하여 양식을 제출할 때 어떤 종류의 요청을 보내고 있는지 테스트하십시오.

최근이 지역의 문서 개선을 위해 Play 프레임 워크 문제를 만들었습니다 : https://github.com/playframework/playframework/issues/8004.이것에 대한 생각이 있다면 의견을 남겨주세요.