2012-12-07 74 views
2

我想在這個幫助下做部分頁面刷新。以一個場景,我們有一個下拉列表根據它的選擇選項,我想刷新頁面的div部分,根據下拉選擇填充數據。如何在struts2中使用struts2-jquery插件進行局部頁面刷新?

如何做到這一點?

更新時間:

我已經試過這樣:

JSP代碼:
在此下拉選擇我想填充(刷新)股利。

<s:form id="RoleListForm"> 
     <s:label value="Roles"/> 
     // JSON Action populating roleNameList on page Load 
     <s:url id="fetchJsonRoleListUrl" action="fetchJsonRoleList"/> 
     <sj:select 
     name="idRoleInfo" 
     id="idRoleInfoList" 
     href="%{fetchJsonRoleListUrl}" 
     list="roleNameList" 
     onChangeTopics="reloadRolePrivilegesDiv" 
     listKey="idRoleInfo" 
     listValue="roleName" 
     emptyOption="true"/> 
    </s:form> 

這裏是我想根據DD選擇填充DIV代碼,但我沒有得到文本框的值填充:

// JSON動作在頁面加載

<s:url id="roleDetailsUrl" action="roleDetailsAction" /> 
<sj:div href="%{roleDetailsUrl}" formIds="RoleListForm" reloadTopics="reloadRolePrivilegesDiv"> 
    <s:textfield id="idRoleName" name="roleName" /> 
    <s:textfield id="idRolePrivileges" name="privileges"/> 
</sj:div> 

我我正在瀏覽器中使用div部分:

{"roleName":"IT User","privileges":"IT User"} 

更新部分:

Action類:

public class GraphsAction extends ActionSupport { 

private String startDate; 
private String endDate; 
private String bodyStats; 
HomeService homeService = new HomeService(); 
SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy"); 

public String reloadDatePicker() { 
    Date date1 = new Date(); 
    Date date2 = new Date(); 
    Map session = ActionContext.getContext().getSession(); 
    Integer loginId = (Integer) session.get("loginId"); 
    if (loginId != null) { 
     List list = homeService.getAllGraphData(loginId); 
     List chestList = homeService.getChestGraphData(loginId); 
     List waistList = homeService.getWaistGraphData(loginId); 
     List hipsList = homeService.getHipsGraphData(loginId); 
     List bicepsList = homeService.getBicepsGraphData(loginId); 
     if (bodyStats.equals("")) { 
      UserStats usetsts = (UserStats) list.get(0); 
      date1 = usetsts.getUpadtedDate(); 
      this.startDate = formatter.format(date1); 
      UserStats usetsts1 = (UserStats) list.get(list.size() - 1); 
      date2 = usetsts1.getUpadtedDate(); 
      this.endDate = formatter.format(date2); 
     } 
     if (bodyStats.equals("0")) { 
      UserStats usetsts = (UserStats) list.get(0); 
      date1 = usetsts.getUpadtedDate(); 
      this.startDate = formatter.format(date1); 
      UserStats usetsts1 = (UserStats) list.get(list.size() - 1); 
      date2 = usetsts1.getUpadtedDate(); 
      this.endDate = formatter.format(date2); 
     } 
     if (bodyStats.equals("1")) { 
      UserStats usetsts = (UserStats) list.get(0); 
      date1 = usetsts.getUpadtedDate(); 
      this.startDate = formatter.format(date1); 
      UserStats usetsts1 = (UserStats) list.get(list.size() - 1); 
      date2 = usetsts1.getUpadtedDate(); 
      this.endDate = formatter.format(date2); 
     } 
     if (bodyStats.equals("2")) { 
      UserStats usetsts = (UserStats) list.get(0); 
      date1 = usetsts.getUpadtedDate(); 
      this.startDate = formatter.format(date1); 
      UserStats usetsts1 = (UserStats) list.get(list.size() - 1); 
      date2 = usetsts1.getUpadtedDate(); 
      this.endDate = formatter.format(date2); 
     } 
     return SUCCESS; 
} 

public String getEndDate() { 
    return endDate; 
} 

public void setEndDate(String endDate) { 
    this.endDate = endDate; 
} 

public String getStartDate() { 
    return startDate; 
} 

public void setStartDate(String startDate) { 
    this.startDate = startDate; 
} 
    public String getBodyStats() { 
    return bodyStats; 
} 

public void setBodyStats(String bodyStats) { 
    this.bodyStats = bodyStats; 
} 

} 

的struts.xml:

<action name="jsonReloadDatePickerAction" class="com.ebhasin.fitnessbliss.actions.GraphsAction" method="reloadDatePicker"> 
    <result name="success">/jsps/datePicker.jsp</result> 
</action> 
+0

你知道你需要struts2-json-plugin,你有沒有返回json的動作呢?你有沒有用java腳本調用它來獲取數據?你有沒有試圖用jquery將數據寫入div,可能使用jQuery.getJSON()和適當的回調函數? – Quaternion

+0

@ Quaterninon我更新了我的問題,請檢查我在做什麼 – Vishu

+0

@ user1703710,您的問題有兩個部分,1)服務器端生產json並將其返回給瀏覽器。 2)在瀏覽器上呈現該json。使用這些sj:標籤的問題是他們混淆了這個問題。它們是面向客戶端的,但需要觀衆瞭解服務器端技術,從而大大減少您的觀衆,而且即使對於struts2用戶,這些標籤也是非常可選的。 – Quaternion

回答

0

其中一個方案是把內容這是目前裏面你<sj:div>分離JSP頁面和配置roleDetailsAction操作返回該頁面而不是json結果。

+0

我之前也做了同樣的事情,它對我來說工作得很好,但問題在於它需要時間來重新加載該jsp。我不知道爲什麼? – Vishu

+0

你的意思是顯示div的內容需要很長的時間嗎?你在行動中做了什麼? –

+0

正確它需要太隆重顯示,我用struts.xml更新了上面的操作。 – Vishu

0

我必須在幾乎所有的軟件解決方案中做到這一點...... !!這是我做的

一)與服務器和在HTML源代碼中所有必要的數據加載的頁面與JS的功能鏈接onchange事件的下拉按鈕。

b)使用從服務器獲得的數據填充/初始化頁面。

c)由於我們已經將下拉按鈕的onchange事件與我們在JS中的實現關聯起來,我們所要做的就是從這些函數(在JS中)調用AJAX調用並從服務器獲取所需的數據。同樣,在完成當前AJAX請求的響應中,我們從服務器獲取相關數據,然後使用DOM操作來更新所需數據的頁面。

我們必須堅持頁面的所有元素/ div的id,並用jQuery來擺弄它們。

一切順利。

PS:如果您需要相同的參考代碼,請ping我!

相關問題