1

この質問はこれに関連してます。しかし、私はまだその質問を解決していないので、私の問題を少し言い直したいと思います. バックエンド Web サービスとして Java Jersey REST API を使用しています。クライアント側は単純な Web フォームの HTML ページです。基本的に私が欲しいのは: ユーザーが Web フォームを送信し、データベースの一意の制約違反が原因でエラーが発生した場合、フォームの id フィールドと共に「ID は既に存在します! "。Web フォームは単純な form.html です。

<form action="/myapp/rest/customer/created" method="POST">
    <table border="1">
        <tr>
            <td>Customer name:</td>
            <td><input type="text" name="name"></td>
        </tr>
        <tr>
            <td>Customer ID:</td>
            <td><input type="text" name="id"></td>
        </tr>
        <tr>
            <td>Customer DOB:</td>
            <td><input type="text" name="dob"></td>
        </tr>
    </table>
    <br/>
    <input type="submit" value="Submit">
</form>

エラーが発生した場合、Jersey API からクライアント側にエラー情報を渡す方法は? このフォーム送信に関連付けられているサーバー側の POST 呼び出しは次のとおりです。

@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Path("created")
public Response createCustomer(@FormParam("id") int id,
        @FormParam("name") String name, @FormParam("dob") Date dob)
        throws ServletException, IOException {
    URI uri = URI.create(uriInfo.getPath());
    Response r;
    r = Response.created(uri).build();

    try {
        dbController.create(id, name, dob); //This may throw exception.

    } catch (DataAccessException ex) {

        //To do: How to pass the error message to the client-side UI via e.g., Ajax?

    }

    return r;
}
4

1 に答える 1

1

まず、これをコードのどこかに追加します。次のエラー メッセージが表示されます。

<span id="errorDiv" name="errorDiv" class="errorDiv" ></span>

次に、フォーム宣言を次のように変更します。

<form action="/myapp/rest/customer/created" method="POST" onsubmit="return checkForm()">

フォームを送信する前に、checkForm() 関数を呼び出します。関数が true を返すと、フォームが投稿されます。そうでない場合は、フォームの送信が妨げられ、エラー メッセージが表示されます。

jQuery/AJAX 呼び出しを使用してフォームの内容を送信していると仮定します。サーバーから文字列 (デフォルト値 = 'success') を返すことができます。エラーが発生した場合は、特定の文字列を変更して返し、クライアント側の値を確認してください。

responseTxt は返される値です。

function checkForm(){
  //get values from form
  var name= $("#name").val();               
  var id= $("#id").val();
  var dob= $("#dob").val();

  $.post('DESTINATION',{name:name,id:id,dob:dob},function(responseTxt) {
  //MAKE YOUR CHECK HERE. JUST AN EXAMPLE
  if (responseTxt.substring(0,4)=='succ'){
  //redirect to destination
    return true;

  }else{

  //display error in errorDiv span

  $('#errorDiv').html('<font color=red>Wrong username or password.</font>');

  //prevents form to be submitted
  return false;
  }

  });
}

それが役に立てば幸い

于 2013-06-11T21:47:58.607 に答える