[英]Passing value from a servlet to jsp using javascript
我是Web編程的新手,我正在嘗試構建一個struts應用程序。 我想根據在同一頁面的下拉框中選擇的選項從文件或數據庫中打印值。 為了做到這一點,我必須從servlet中獲取數據,並使用javascript將其顯示在jsp中。 但我不知道如何使用javascript顯示值。
handler.java(servlet)
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import net.sf.json.JSONObject;
import net.sf.json.JSONArray;
public class handler extends org.apache.struts.actions.DispatchAction{
private static final String SUCCESS = "success";
public ActionForward Add(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)throws Exception {
actionFileAndDB obj=new actionFileAndDB();
JSONArray list=obj.view();
request.setAttribute("jsonArray",list);
System.out.println("this is being called");
String s1=request.getParameter("dropdown");
System.out.println("add="+s1);
String s="Karthikeyan";
request.setAttribute("myname",s);
return mapping.findForward(SUCCESS);
}
}
view.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page import="net.sf.json.JSONObject"%>
<%@page import="net.sf.json.JSONArray"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>View</title>
</head>
<body>
<form action="operations.do">
<table>
<tr>
<td>
<select value="s" name="dropdown">
<option>VIEW</option>
<option>Database</option>
<option>File</option>
<option>Both</option>
</select>
</td>
<td>
<input type="hidden" id="f4" value=<%= request.getAttribute("s") %> />
<input type="button" value="Add" name="actionMethod" onclick="viewData();" />
</td>
<td>
<input type="submit" value="Edit" name="actionMethod"/>
</td>
<td>
<input type="submit" value="Delete" name="actionMethod"/>
</td>
</tr>
</table>
</form>
<div id="p1">
asdfasdf
</div>
<script type="text/javascript">
function viewData()
{
document.getElementById("p1").innerHTML=document.getElementById("f4").value;
event.preventDefault();
}
</script>
</body>
</html>
我嘗試顯示從javascript到jsp的值(從代碼中可以看出),但是無法這樣做。是否有必要了解JQuery和Ajax? 請幫幫我。
我認為我們找到了一種實現您打算完成的目標的方法。 因此,首先,我了解到用例是用戶獲得了一個選擇器('#dropdown'),他們選擇了一些條目,然后該視圖查找數據存儲(數據庫或服務器上隱藏的文件)並顯示了一些信息。 。 這些交互式顯示的信息完全取決於所選的選項。 我說對了嗎?
如果這是您要執行的操作,則我們需要三個文件:原始的StrutsAction(1),原始的View(JSP)(2),以及另一個StrutsAction,用於我們從服務器傳遞信息的請求。 而(1)和(2)仍在您的問題中,並且它們必須當前正在運行。 (我更喜歡在大寫情況下用Java命名類,例如'Handler'和'ActionFileAndDB'。)
要在類中獲得交互性,請首先在Struts的config.xml
文件中創建帶有映射的新StrutsAction。 這些必須以JSON表示法傳遞數據。 我將使用Jackson JSON,JAXB或某些lib來執行此操作。 當然,您也可以傳遞(本地化)字符串。 我建議使用您的“ operations.do”。
然后,在視圖中我們有兩個選擇:
改用AJAX
表單更容易完成,但是我們必須提交此表單(例如,使用提交按鈕)才能使更改生效。 而且我們必須重定向到我們的原始視圖(反射),因此將永遠不會離開此站點。 因此,處理對於用戶而言更糟。
使用AJAX的好處是可以交互(信息在選擇后立即顯示),我們可以將表單提交到其他地方。 在這種情況下,您可以首先使用jQuery.get('operations.do').done(...)
從服務器加載數據,並在'done'和'fail'中使用回調函數。 該回調函數將顯示檢索到的“數據”(以防萬一,如果是“完成(數據)”)或使用jQuery('p1').html(data)
或jQuery('p1').html('An error occured!')
在您的“ p1”標簽上。)。 您也可以使用jQuery.post(...)
。 有關用法的更多信息,我發現這很有幫助: https : //api.jquery.com/jQuery.get/
在開始實施任何解決方案之前,我會非常明確地說明信息的傳播:由於所需的數據和傳遞的數據很難在復雜的應用程序中進行更改。 實現方式在很大程度上取決於您選擇形式(1)還是AJAX(2)。
這是我為我的問題找到的解決方案:
我將以下代碼添加到動作類的“ View”方法中,即handler.java-
response.setContentType("text/JSON");
try
{
PrintWriter out = response.getWriter();
out.println(o);
out.flush();
}
catch(Exception e)
{
System.out.println(e);
}
return null;
其中“ o”是一個JSON對象,其中包含JSON對象的JSON數組。
我寫了一個腳本來執行動作類
var url="http://localhost:8080/MyProjDBandFilesv2/operations.do?dropdown="+dropval+"&actionMethod=View";
其中View是在'handler'類中要調用的方法,而'url'作為參數傳遞給JQuery post方法。
在struts-config.xml中定義“ operations.do”的路徑如下-
<action path="/operations" type="handler" parameter="actionMethod">
<forward name="success" path="/view.jsp"/>
<forward name="add" path="/AddOrEdit.jsp"/>
</action>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.