servlet转发动作时如何触发javascript函数

Posted

技术标签:

【中文标题】servlet转发动作时如何触发javascript函数【英文标题】:How to trigger a javascript function when servlet forward action 【发布时间】:2020-12-17 11:24:38 【问题描述】:

我的项目中有一个 jsp 页面。在这个 jsp 页面中,我有由 javascript 函数填充的输入。当 servlet post 操作发生时,此输入的值将消失。当servlet转发jsp页面时,我想再次填写这些输入。那么,是否可以从 servlet 触发 javascript 函数?

我的 JSP 页面代码

<div style="margin-left:7%; margin-right:10%; border-style:groove;">
            <div style="margin-right:65&; margin-left:5px;">
                <label for="salesOrder">Sales Order</label>&nbsp;&nbsp;<input id="sOrder" style="margin-left:58px;" onkeyup="this.value = this.value.toUpperCase();" onselect="salesOrder();fill_table();" value="$salesorder">&emsp;&emsp;<label style="margin-left:75px;">Count:</label>&nbsp;&nbsp;<input type="text" id="count" size="3" style="margin-top:3px;"><br>
                <label>Ind. Date:</label>&emsp;&nbsp;<input type="text" id="induction" style="margin-left:59px;" size="15"><br>
                <label>Customer/Operator:</label>&nbsp;<textarea  id="customer" rows="1" cols="10" wrap="soft"></textarea>&ensp;<textarea id="operator" rows="1" cols="10" wrap="soft"></textarea><br>
                <label>Removal Reason:</label>&emsp;<textarea rows="2" cols="30" wrap="soft" id="rem_reason" style="margin-left:10px; height:50px; text-size:10px;"></textarea>
            </div>  
            <div style="margin-left:45%; margin-top:-130px;">
                <input type="checkbox" name="v2500" value="V2500-A5" onclick="check_v25()">&nbsp;<label for="v2500">V2500-A5</label><br>
                <input type="checkbox" name="7b" value="CFM56-7B" onclick="check_7b()">&nbsp;<label for="7b">CFM56-7B</label><br>
                <input type="checkbox" name="5c" value="CFM56-5C" onclick="check_5c()">&nbsp;<label for="5c">CFM56-5C</label><br>
                <input type="checkbox" name="3" value="CFM56-3" onclick="check_3()">&nbsp;<label for="3">CFM56-3</label>
            </div>
            <div style="margin-left:65%; margin-top:-130px;">
                <label>TSN:</label>&emsp;&ensp;<input type="text" id="tsn" style="margin-left:1px;"><br>
                <label>CSN:</label>&emsp;&ensp;<input type="text" id="csn" style="margin-left:-0.5px;"><br>
                <label>TSLSV:</label>&ensp;&nbsp;<input type="text" id="tslsv" style="margin-left:-1px;"><br>
                <label>CSLSV:</label>&ensp;&nbsp;<input type="text" id="cslsv" style="margin-left:-3px;">
            </div>
        </div>

我的 JavaScript 函数

<script>
function salesOrder(event,ui)
    $("#sOrder").val(ui.item.label);
    var salesOrder=$("#sOrder").val();
    var URL_PREFIX="http://ptrisd01:8983/solr/SalesOrderCore/select?q=STRSO:";
    var URL=URL_PREFIX+salesOrder;
    $.ajax(
        url : URL,
        dataType : 'json',
        type:'get',
        json : 'json.wrf',
        success:function(data)
            console.log("success");
            var docs = JSON.stringify(data.response.docs);
            var jsonData = JSON.parse(docs);
            document.getElementById("induction").value=jsonData[0].STRINDDATE;
            document.getElementById("customer").value=jsonData[0].STRCUSTOMER;
            document.getElementById("operator").value=jsonData[0].STROPERATOR;
            document.getElementById("rem_reason").value=jsonData[0].STRREMREASON;
            document.getElementById("tsn").value=jsonData[0].STRTSN;
            document.getElementById("csn").value=jsonData[0].STRCSN;
            document.getElementById("tslsv").value=jsonData[0].STRTSLSV;
            document.getElementById("cslsv").value=jsonData[0].STRCSLSV;
        
    );
;
</script>

我的 servlet 代码的一部分

            request.setAttribute("salesorder", salesOrder_hidden);
            PrintWriter out = response.getWriter();
            out.println("<script type=\"text/javascript\">");
            //out.println("alert('Saving completed...');");
            //out.println("location='upload.jsp';");
            out.println("salesOrder();");
            out.println("</script>");
            request.getRequestDispatcher("upload.jsp").forward(request, response);

另外,我正在使用 JQuery 自动完成来处理 sOrder 输入。

【问题讨论】:

有两种方式..将其存储在客户端或服务器端。客户端使用localstorage or sessionstorage,服务器端使用setAttribute.. @Swati 我使用 IE 出于某些原因,我知道 IE 不支持 localstoragesessionstorage。我说的对吗? 我没有在 IE 上使用 localstorage,但它可能适用于较新的版本。另外,检查 these 和 this 会帮助你。 【参考方案1】:

斯瓦蒂说的话。看起来你还不知道会话。如果您使用 Java,请在 servlet 中创建 Session。

HttpSession session = request.getSession();
session.setAttribute("attributeName", value);
response.sendRedirect("your.jsp");

【讨论】:

以上是关于servlet转发动作时如何触发javascript函数的主要内容,如果未能解决你的问题,请参考以下文章

jsp 的 7 个动作指令

jsp基础知识二(jsp动作指令)

[Java][Web] Servlet中转发和重定向比较

JSP中的7个指令

释放 LongPressGesture SwiftUI 时触发动作

JAVAWEB开发之Session的追踪创建和销毁JSP详解(指令,标签,内置对象,动作即转发和包含)JavaBean及内省技术以及EL表达式获取内容的使用