Grails在弹出窗口后呈现gsp页面

时间:2013-08-07 07:23:42

标签: javascript grails twitter-bootstrap render popupwindow

我有一个使用twitter bootstrap的弹出窗口,然后我有一个调用控制器动作的javascript。在该控制器操作上,我呈现一个要在弹出窗口中显示的字符串。在那个动作上我有另一个渲染,它渲染gsp页面本身,因为在textarea中添加了一个值。如何使第二次渲染工作?

GSP:

          <g:javascript>
        function callEgCreate(){
          $.ajax({
          type: "GET",
          url: "${createLink(controller: 'MGExecutingGroup', action: 'addEG_Create')}",
          data: {
                    "inputField="+$("[name='inputField']").val()
                    "listField="+$("[name='listField']").val()
          }
            }).success(function(data) {
                $('.modal-body').html(data);
                $('#myModal').modal('show');
            });
        }
      </g:javascript>

       <g:textField name="inputField" />
      <!-- Button to trigger modal -->
      <a href="javascript:void(0)" class="btn" onclick="callEgCreate()">+</a>


      <!-- Modal -->
      <div id="myModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
        <div class="modal-header">
          <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
          <h3 id="myModalLabel">Members</h3>
        </div>
        <div class="modal-body">
        </div>
      </div>
      <textArea name="listField" id="listField" rows="50" cols="6" readonly>${params.Result}</textarea></td>

控制器:

def addEG_Create = {
    def LdapName
    def result
    def membersString = ''
    def members = ''
    result = proxy.getWLSGroupParticipants(params.inputField)
    if(result != null){
        params.egId = params.id
        LdapName = proxy.getWLSGroupsForUser(result[0])
        int index
        if (LdapName.size()>1){
            index = 0
            //find the index number for the correct Ldap name
            for (int i = 0; i < LdapName.size(); i++) {
                if (LdapName[i].toUpperCase() == params.inputField.toUpperCase()){
                    index = i
                }
            }
        }else{
            index = 0
        }
        if(params.listField.find(LdapName[index])){
            params.Result = params.listField.trim()
            membersString = params.listField.replace('\n',',')
            flash.message = params.inputField + " exist in the list!"
        }else{
            flash.message = ""
            if(params.listField!=''){
                if(params.listField.charAt(params.listField.length()-1)=='\n'){
                    params.listField = params.listField.substring(0,params.listField.length()-1)
                }
                params.Result = params.listField.trim() + '\n' + LdapName[index].trim()
                membersString = params.Result.replace('\n',',') 
                //membersString = params.listField.replace('\n',',') + LdapName[index] 
            } else{
                params.Result = LdapName[index].trim()
                membersString = LdapName[index]
            }
        }
        for (int i = 0; i < result.size(); i++) {
            if(i == 0){
                members = result[i].trim()

            }
            else {
                members = members + '\n' +result[i].trim()
            }
        }
        params.Members = members
    } else {
        flash.message = params.inputField + " not found in LDAP. Please contact TECH CUST CARE"
        params.Result = params.listField.trim()
        membersString= params.listField.replace('\n',',')
        //println "Not Found"
    }  
    membersString = membersString.replace('\r','')
    MGExecutingGroupInstance.members = membersString.trim()
    render(members)
    render(view:'create')
}

1 个答案:

答案 0 :(得分:0)

Jeka,你不能渲染两个这样的想法

render(members)
render(view:'create')

我认为你能做到这一点的更好方法就是这样:

在您的控制器中,您可以将数据呈现为JSON:

def addEG_Create () {
    ...
    ...
    render([members:members, openWin:'create'] as JSON)
}

在你的.gsp中,你应该做这样的事情:

function callEgCreate(){
      $.ajax({
      type: "GET",
      url: "${createLink(controller: 'MGExecutingGroup', action: 'addEG_Create')}",
      data: {
                "inputField="+$("[name='inputField']").val()
                "listField="+$("[name='listField']").val()
      },
      dataType: 'json',   
      success(function(data) {
            window.open(data['openWin']);
            $('.modal-body').html(data['members']);
            $('#myModal').modal('show');
        });
    }

我没有测试过这段代码,可能会有一些错误,但逻辑就是这样。

<强>更新

function callEgCreate() {
    $.ajax({
        type: "GET",
        url: "testeChamada",
        data: {"inputField": $("[name='inputField']").val(), "listField" : $("[name='listField']").val()},

        dataType: 'json',
        success: function (data) {
            window.open(data['openWin']);
            $('.modal-body').html(data['members']);
            console.log(data['members']);
        }
    });
}

Ps1:当你说渲染render([members:members, openWin:'create'] as JSON)时,在你的控制器中,你必须使用地图[key:value]

的键在你的页面中接收数据

Ps2:在data:你犯了一个错误。它应该是一个带有Key:Value

的地图