2013-08-07 38 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