我正在使用 Java+Tapestry+jQuery+Hibernate 开发一个 Web 应用程序,我有一个 datatable用于显示数据。该数据是一个“部分”类Client,只有几个属性。当我连续单击时,将其类更改为“.selected”,并且我控制连续双击以显示模式,并且每行都有一个“id”。在此模式中,我想显示所有 Client 类属性,并且需要调用数据库(“getClientByClientId(Long clientId);”),现在在表单中,我想在输入元素中显示属性,以便编辑类。
我的 .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() 抛出 InstanceNotFoundException {
clientId = request.getParameter("param");
如果 (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控制台中,“id”是正确的,然后数据库调用也是正确的,但客户端中的属性“clientDetails”为空,并且没有出现名称的值;
最佳答案
由于您使用 $.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 与您的代码集成(我不提供示例,因为我不知道这是否适用于您的情况)。
关于java - 使用 Tapestry 的 Bootstrap 模式内的 Ajax 区域形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24426701/