使用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