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> <input id="sOrder" style="margin-left:58px;" onkeyup="this.value = this.value.toUpperCase();" onselect="salesOrder();fill_table();" value="$salesorder">  <label style="margin-left:75px;">Count:</label> <input type="text" id="count" size="3" style="margin-top:3px;"><br>
<label>Ind. Date:</label>  <input type="text" id="induction" style="margin-left:59px;" size="15"><br>
<label>Customer/Operator:</label> <textarea id="customer" rows="1" cols="10" wrap="soft"></textarea> <textarea id="operator" rows="1" cols="10" wrap="soft"></textarea><br>
<label>Removal Reason:</label> <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()"> <label for="v2500">V2500-A5</label><br>
<input type="checkbox" name="7b" value="CFM56-7B" onclick="check_7b()"> <label for="7b">CFM56-7B</label><br>
<input type="checkbox" name="5c" value="CFM56-5C" onclick="check_5c()"> <label for="5c">CFM56-5C</label><br>
<input type="checkbox" name="3" value="CFM56-3" onclick="check_3()"> <label for="3">CFM56-3</label>
</div>
<div style="margin-left:65%; margin-top:-130px;">
<label>TSN:</label>  <input type="text" id="tsn" style="margin-left:1px;"><br>
<label>CSN:</label>  <input type="text" id="csn" style="margin-left:-0.5px;"><br>
<label>TSLSV:</label>  <input type="text" id="tslsv" style="margin-left:-1px;"><br>
<label>CSLSV:</label>  <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 不支持 localstorage 或 sessionstorage。我说的对吗?
我没有在 IE 上使用 localstorage,但它可能适用于较新的版本。另外,检查 these 和 this 会帮助你。
【参考方案1】:
斯瓦蒂说的话。看起来你还不知道会话。如果您使用 Java,请在 servlet 中创建 Session。
HttpSession session = request.getSession();
session.setAttribute("attributeName", value);
response.sendRedirect("your.jsp");
【讨论】:
以上是关于servlet转发动作时如何触发javascript函数的主要内容,如果未能解决你的问题,请参考以下文章
释放 LongPressGesture SwiftUI 时触发动作
JAVAWEB开发之Session的追踪创建和销毁JSP详解(指令,标签,内置对象,动作即转发和包含)JavaBean及内省技术以及EL表达式获取内容的使用