如何使用struts2中的struts2-jquery插件进行部分页面刷新?

时间:2012-12-07 15:23:54

标签: jquery json struts2 struts2-jquery struts2-json-plugin

我希望借助此功能进行部分页面刷新。根据一个场景,我们根据选择它的选项有一个下拉列表,我想刷新页面的div部分,并根据下拉选择填充数据。

怎么做?

已更新:

我试过这个:

JSP代码:
在此下拉选项中,我想填充(刷新)div。

<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代码,但我没有填写textfields值:

//页面上的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"}

更新了部分:

行动类:

 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>

2 个答案:

答案 0 :(得分:0)

其中一个选项是将当前位于<sj:div>内的内容放在单独的JSP页面中,并配置roleDetailsAction操作以返回该页面而不是json结果。

答案 1 :(得分:0)

我必须在几乎所有的软件解决方案中都这样做...... !!这就是我做的事情

a)从服务器加载包含所有必要数据的页面,并在HTML源代码中使用JS中的函数链接下拉按钮的onchange事件。

b)使用从服务器获取的数据填充/初始化页面。

c)由于我们将下拉按钮的onchange事件与我们在JS中的实现相关联,我们所要做的就是从这些函数(在JS中)调用AJAX并从服务器获取所需的数据。再次在完成当前AJAX请求的响应中,我们从服务器获取相关数据,然后我们使用DOM操作来更新具有所需数据的页面。

我们必须坚持使用jQuery的所有元素/ div的id,并用jQuery来摆弄它们。

一切顺利。

PS:如果您需要相同的参考代码,请告诉我...... !!