使用JSP中
回答
讓我們考慮一下這個Java類。
class Employee
{
int id;
String eName;
// Setters and getters
}
在JavaScript中,JSON對象:
var employee = {
id : null,
name : null
};
這是從JavaScript函數的Java方法調用:所述EmployeeUtil類的
EmployeeUtil.getRow(employee,dwrData);
在的getRow(),方法的退貨類型爲員工:
Employee getRow();
所以使用Employee的setters設置數據。 dwrData是回調函數。
function dwrData(data) {
employee=data;
}
返回的數據,這是一個Employee bean,將在回調函數中。
在JavaScript JSON對象只是初始化這一點。
因此使用JSON對象來填充表。
編輯:
可以使用List getRow()
代替Employee getRow()
,返回行的列表作爲列表,而不是一個Bean。
現在響應包含列表作爲數據。
檢查這些例子在表填充數據:
我應該使用JSON構建的反應如何?
不需要傳遞JSON作爲迴應。而是返回一個如上所述的類的Bean。
列表也可以作爲響應傳遞,也如上所述。
如何在JSP級別處理數據。也就是說,一旦我有了服務器的響應。
查看上面的解釋和給定鏈接的示例,以處理JSP中的響應並將響應數據顯示在表中。
JSP頁面是動態生成的servlet。一旦用戶點擊一個JSP頁面,他們會收到動態生成的HTML,除非他們完成諸如「刷新」或提交表單之類的操作,否則它們不再與生成該頁面的JSP頁面進行通信。查看Oracle的JSP Page獲取更多信息,Wikipedia獲得關於JSP技術的體面高級解釋。
來處理Ajax,你將需要定義能夠處理從JavaScript上來的XML請求的一個新的網絡端點。請參閱this example,this library或此JSON Example。
Thx很多這樣..我找不到我在尋找的例子...雖然我非常瞭解使用JSP,但我正在尋找的是如何動態解析AJAX響應並使用它來填充表格單元格...即說響應返回5x5(或更確切地說25個數據點)...我需要解析它們,並使用它們來填充我的5x5表格單元格.. – testndtv
我做的相當頻繁是設置針對這種情況兩個servlet:
MyServlet
MyAJAXServlet
MyServlet處理普通的HTTP請求和(通常)使用一個RequestDispatcher轉發結束對JSP的請求。
例子:
public class MyServlet extends HttpServlet {
private static final long serialVersionUID = -5630346476575695999L;
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
doGetAndPost(req, res);
}
public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
doGetAndPost(req, res);
}
private final void doGetAndPost(HttpServletRequest req,
HttpServletResponse res) throws ServletException, IOException {
/*
* Handle the response here, manipulate the 'MODEL'
*/
/*
* Forward to the 'VIEW' (No Baba Wawa jokes please)
*/
RequestDispatcher rdis = req.getRequestDispatcher("Path/To/My/JSP");
rdis.forward(req, res);
}
}
凡爲AJAX Servlet檢查請求的參數列表的「命令」的存在:如果格式化你的JSP,允許批量替換HTML的
public class MyAJAXServlet extends HttpServlet {
private static final long serialVersionUID = -5630346476575695915L;
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
doGetAndPost(req, res);
}
public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
doGetAndPost(req, res);
}
private final void doGetAndPost(HttpServletRequest req,
HttpServletResponse res) throws ServletException, IOException {
String cmd = req.getParameter("cmd");
if (cmd == null || cmd.length() < 1) {
/* Custom fail mode here, perhaps toss back failure HTML */
return;
}
/* Easily implement command pattern here, but for simplicity, we will use an if tree */
if (cmd.equalsIgnoreCase("getSomeData")) {
String out = "<tr><td>ExampleCell in ExampleRow</td></tr>";
res.getWriter().append(out);
return;
} else if (cmd.equalsIgnoreCase("someOtherCommand")) {
/* Do something else */
}
}
}
像這樣的元素:
<table id="pleaseReplaceMyContentsTABLE">
<tr><td> </td></tr>
</table>
然後,它變得非常容易動態修改網頁p年齡段的用戶(使用jQuery在這個例子中):
var url = "http://mydomain.whatever/myapp/MyAJAXServletMappedURL?cmd=getSomeData";
$.post(url, function(data) {
//Message data a bit & display
$("#pleaseReplaceMyContentsTABLE").html(data);
});
從AJAX的Servlet發回預先格式化的HTML一些限制:
- 如果要回送一箇中度到大量的數據,然後當客戶數量開始上升時,您的網絡服務器很容易變得過載。又如,它不會很好地擴展。
- 正在格式化HTML以發送給客戶端的Java代碼可能會變得難看難讀。很快。
- 如果您使用DWR,則不需要使用JSON,它在內部使用。
- 使用javascript,jsp代碼超出範圍。該頁面已生成,因此您只能使用javascrip修改DOM。
在DWR教程中有很多示例正在做你所需要的。我想你只需要做一些事情爲:
dwrobject.funtionAjax(param,returnFunction);
...
function returnFunction(data) {
// use javascript to change the dom
}
你可以添加更多的細節... – testndtv
你的意思是代碼? 有很多方法來實現你的內在。基礎是比ajax函數應該返回一個List,並且他們可以從js中訪問列表中的每個元素作爲data [index]。如果列表中的元素是另一個列表,則可以使用相同的方式data [index1] [index2]再次訪問它。請記住,列表中的最後一個對象在dwr.xml中定義爲bean。 – yoprogramo
你能否提供你剛剛提到的2件事的任何例子;返回List和Javascript中的相應解析。我只能在你能提供詳細的樣本時才能接受。 – testndtv
阿賈克斯部分:我們返回對象的列表:
public List<IdTexto> getPaisesStartingBy(String texto,String locale){
List<IdTexto> res = new ArrayList<IdTexto>();
// Fill the array
return res;
}
的IdTexto是geters和setter一個簡單的bean:
public class IdTexto {
private int id;
private String texto;
private String texto2;
// getters and setters
}
它在dwr.xml中定義爲bean:
<convert converter="bean" match="com.me.company.beans.IdTexto"/>
而且包含Java功能的類被定義爲創作者:
<create creator="new" javascript="shopdb">
<param name="class" value="com.me.company.ajax.ShopAjax"/>
</create>
在JSP中,我們定義一個函數JavaScript來獲取一些文本對象以這種方式開始的列表:
shopdb.getPaisesStartingBy(req.term,'<s:text name="locale.language"/>', writePaises);
並寫下相應功能的文本:
function writePaides (data) {
var result="<table>";
for (i=0; i<data.length;i++) {
id = data[i].id;
texto=data[i].texto;
texto2=data[i].txto2;
// now we write inside some object in the dom
result+="<tr><td>"+id+"</td><td>"+texto+"</td><td>"+texto2+"</td></tr>";
}
result+="</table>";
$("tabla").innerHTML=result;
}
如果是你,而不是一個bean有一些其他的對象,你會訪問properti以同樣的方式。
Thx很多... 2件事;一個是,我不想輸出完整的HTML字符串..它應該像是會有佔位符已經存在的東西,我只是通過解析響應來填充它們,其次我計劃使用基於div的網格爲我的表即相同的網格將被創建,但不使用表格標記..thx – testndtv
我們還可以將這個邏輯擴展到多維數組,如2維數組嗎? – testndtv
使用佔位符沒有問題,只需使用javascript函數來修改其內容即可。我沒有使用list屬性進行測試,但是可以將任何java對象轉換爲js usin dwr,因此,我認爲可以發送列表列表。 – yoprogramo
- 1. 在Servlet中使用JSP豆
- 2. javax.el.PropertyNotFoundException:在JSP中使用JSTL
- 3. 如何使用JSP中
- 4. 使用的JSP
- 5. 網::使用JSP
- 6. 使用JSP
- 7. 使用JSP
- 8. 無法在jsp中使用遞歸在jsp中顯示樹
- 9. 使用jsp的JSP性能:include
- 10. 搗亂使用JSP
- 11. 如何使用JSP
- 12. 清除使用JSP
- 13. 使用NSMutableURLRequest和JSP
- 14. 更新使用JSP
- 15. 使用JSP標籤
- 16. 使用JSP和Wicket
- 17. 如何使用JSP
- 18. 確定使用JSP
- 19. 在grails應用程序中使用JSP
- 20. 在JSP中使用Id或用戶名
- 21. 如何使用javascript將jsp包含在另一個jsp中
- 22. 如何在JSP中使用父JSP變量注入子項?
- 23. JSP(使用jQuery)問題在另一個JSP內(也使用jQuery)
- 24. 使用JSP顯示二叉樹使用JSP
- 25. 如何在JSP頁面中使用Iterables?
- 26. 在JSP中使用EL的groovyxmlslurper
- 27. 使用jquery驗證JSP中的表單
- 28. 如何在JavaScript中使用jsp?
- 29. 如何在JSP中使用equals()方法?
- 30. 如何在JSP中使用writeChartAsPNG?
看到我說客戶端時,我基本上是指JS代碼和JSP生成的html代碼...我不太明白downvote ... – testndtv
Downvote不是我的。也許有人會因爲你的問題對英文的注意力不夠,或者相信你的研究工作很差(我想這些信息可以在DWR指南/教程中找到)。 – BalusC
英語錯誤是bcoz即時通訊從我的iPad寫出來,因此不太流利輸入...我也檢查了dwr文檔..它沒有這個信息.. – testndtv