【问题标题】:How to pass value from servlet to javascript in another jsp如何在另一个jsp中将值从servlet传递给javascript
【发布时间】:2012-05-07 06:37:07
【问题描述】:

我有一个注册表单,我在其中使用 AJAX 验证“首选登录 ID”,因此它会搜索用户表并显示它是否可用,并显示在“用户名可用”或“用户名不可用”文本框旁边可用”。

我的要求是当它不可用时,我想将文本“用户名不可用”从 Servlet 传递回 JSP 中的 javascript,以便我可以阻止用户继续表单。我相信我可以使用 AJAX 做到这一点。但我不知道该怎么做。有人可以用代码帮助我吗?

【问题讨论】:

    标签: javascript ajax jsp servlets


    【解决方案1】:

    我会使用 JQuery,特别是 get() 方法作为示例

    这是一个伪解决方案(没有测试,但这是我会使用的基本方法)

    JavaScript

    var userIsAvailable = false;
    function checkUsernameAvailability(userIdToCheck){
        $.get("pathToServlet",{userId: userIdToCheck},function(resultMessage){
             userIsAvailable = resultMessage=="username available" //this is bad practice, just an example, pass true/false      
             $("#userAvailabilityMessage").text(resultMessage);
        }
     });
    

    HTML

    <form onsubmit="if(!userIsAvailable){alert('user is not available')}; return userIsAvailable">
        <label for="userId">preferred login id<label>
        <input id="userId" ... type="text" onblur="checkUsernameAvailability(this.value)"> 
        <div id="userAvailabilityMessage" />
        ...
    </form>
    

    Servlet(部分)

    @WebServlet("/pathToServlet")
    public class MyServlet extends HttpServlet {
         protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                String result;
    
                if(isUserNameAvailable(request.getParameter("userId"))){
                      result = "username available";
                }else{
                      result = "username not available";
                }
                response.setContentType("text/plain");
                response.getWriter().print(result);
         }
    
    }
    

    【讨论】:

    • 亲爱的朋友,我得到了正确的可用性。如果用户名不可用,它会显示该消息。现在,即使它显示该消息并且用户仍然尝试提交它也不应该允许。所以我实现它的想法是让文本显示在 div 中,如果文本是“用户名不可用”,它应该返回 false 而不是转发。但它不起作用。
    • var tt=document.getElementById("invlist"); var myDiv = tt.firstChild; var myText = myDiv.data; var test="该投资者已经存在";如果(我的文本==测试){警报(测试);返回假}
    • 我试过你的解决方案。它只给我一个警告说用户名不可用:(
    • 尝试调试它,如果用户可用,则 userIsAvailable 应该为 true。要检查,只需将 userIsAvailable 硬编码为 true,并且表单应该提交。如果你通过了这个,那么只要确保 userIsAvailable 得到正确的值......
    • 我试过几次投票..但它说我需要至少 15 个声望才能投票..
    【解决方案2】:

    您需要在消息中发送带有一些标志的对象。您可以为此使用 json。 在 servlet 方面:

    // This object we will transfere from java to javascript
    public class Message {
        private boolean error;
        private String errorMessage;
    
        // Getters and setters ommited
    }
    
    // Servlet code - return content
    
    Message message = new Message();
    message.setError(true);
    message.setErrorMessage("Your error message");
    Gson gson = new Gson(); // GSON - java json library from Google. I prefer it
    String content = gson.toJson(message);
    response.setContentType("text/json");
    response.getWriter().print(content);
    

    最后是javascript代码:

    function processRequest() {
        var result = jQuery.ajax ({
            url: "your.url",
            method: "post",
            async: false,
            data: "your=data&andsomedate=somedata"
        });
    
        // Creating object from json
        var message = jQuery.parseJSON(result.responseText);
    
        // Now we can access all object fields:
        if(message.error) {
            alert("Error message: " + message.errorMessage);
        }
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-13
    • 1970-01-01
    • 2010-12-16
    • 2015-01-18
    • 2017-03-25
    • 1970-01-01
    • 1970-01-01
    • 2014-04-17
    相关资源
    最近更新 更多