我正在使用Java + Tapestry + jQuery + Hibernate开发一个Web应用程序,我有一个datatable用于显示数据。这个数据是"部分" class Client,只有几个属性。当我连续点击时,将他的班级更改为"。选择"并且我控制doubleclick连续显示模态,每行都有一个" id"。在这个模式中我想显示所有Client类属性,我需要调用数据库(" getClientByClientId(Long clientId);")现在在Form中我想在输入元素中显示属性的可能性编辑课程。
我的.tml区域:
<t:zone t:id="zone" id="zone">
<t:if test="clientDetails">
<div class="modal fade" id="modalEdit">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"
aria-hidden="true">×
</button>
<h4 class="modal-title">${message:edit-client}</h4>
</div>
<div class="modal-body">
<form role="form" class="form-horizontal"
t:id="editRowForm">
<div class="form-group">
<input class="form-control" t:id="clientName" t:type="TextField" value="${clientDetails.clientName}"
validate="required" />
</div>
<div class="form-group">
..................
</div>
</form>
</div>
</div>
</div>
</div>
</t:if>
</t:zone>
我的Java类方法:
void onClientDetailsEdit() throws InstanceNotFoundException {
clientId = request.getParameter("param");
if (request.isXHR()) {
clientDetails = masterFilesService.getClientByClientId(Long.parseLong(clientId));
System.out.println(clientDetails.getClientName());
ajaxResponseRenderer.addRender(zone);
}
}
在控制台中,我打印客户名称,这是正确的。
我的.js文件:
$("tr").dblclick(function() {
console.log($(this).attr("id"));
$.post( "/restaurant/masterfiles/masterclient.clientdetailsedit", {param :$(this).attr("id")});
$('#modalEdit').modal('show');
});
在javaScript控制台中,&#34; id&#34;是正确的,然后数据库调用也是正确的但属性&#34; clientDetails&#34;在客户端是空的,并没有出现名称的值;
答案 0 :(得分:0)
由于您使用$.post
自行呼叫服务器,因此您也必须处理响应。
据我所知,从您的代码片段中可能会导致您的内容无法呈现;你只需要将这样的东西附加到你的客户端代码:
$.post( "/restaurant/masterfiles/masterclient.clientdetailsedit", {param: $(this).attr("id")}).done(function(data) {
// assuming you use tapestry5-jquery, you’ll have to do this
if (data.zones) {
// perform multi zone update
$.each(data.zones, function(zoneId, content){
$('#' + zoneId).tapestryZone('applyContentUpdate', content);
});
}
$.tapestry.utils.loadScriptsInReply(data);
});
如果您正在使用原始的5.3 tapestry.js(不知道这与您的jQuery集成有多大关系),您将不得不在这里使用一些不同的JS-API。 阅读tapestry.js源代码,了解如何将ZoneManager与您的代码集成(我不提供示例,因为我不知道这是否适用于您的情况)。