1

这个问题与有关。但是由于我还没有解决这个问题,所以我想重申一下我的问题。我使用 Java Jersey REST API 作为我的后端 Web 服务。客户端是一个简单的 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 回答