带有Tapestry的Bootstrap模式内的Ajax区域

时间:2014-06-26 09:16:04

标签: java jquery ajax datatable tapestry

我正在使用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">&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() 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;在客户端是空的,并没有出现名称的值;

1 个答案:

答案 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与您的代码集成(我不提供示例,因为我不知道这是否适用于您的情况)。