2013-08-07 61 views
0

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

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') 
} 
+2

您可以提供您的操作代码,以便我可以查看您需要的场景。 – Abs

+0

@Abdullah添加了我的代码。 – Jerika

+0

@ user1690588还没有尝试过任何东西。不知道该怎么办。 – Jerika

回答

0

Jeka,你无法呈现的两点思考这样

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

更好的方式,我看你能做到这是这样的:

在你的控制器,可以使您的数据作为JSON:

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

而在你.gsp你应该做shomething这样的:

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:你有犯了一个错误。它应该是一张带有关键字的地图:值

+0

membersString sill不显示在listField textArea上。 – Jerika

+0

@Jeka我在代码中进行了更新,并更正了一些错误。 – meurer

+0

它仍然没有工作。弹出窗口甚至没有显示出来。请帮助 – Jerika