java - 使用 Tapestry 的 Bootstrap 模式内的 Ajax 区域形式

标签 java jquery ajax datatable tapestry

我正在使用 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">&times;
                        </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/

相关文章:

javascript - Uncaught ReferenceError : is not defined onclick

jquery - 添加文本链接 - 链接中包含文本

javascript - 在 JavaScript 中向函数添加选项

javascript - AJAX POST 问题,变量为空,但在 echo 中显示

java - 我在哪里可以下载 net.oauth httpclient4 jar 文件

java - 使用 maven3 加速开发

java - request.getParameterNames() 的顺序

java - 避免数组覆盖

php - 何时使用 AJAX

javascript - 在每个 AJAX 元素后添加脚本标记的替代方法