好的,我会尽量让它简短易懂。
我正在使用 JQuery 完整日历并向用户显示事件。我在页面上有一个过滤器操作,允许用户根据不同的条件过滤显示的事件。这些标准之一是事件名称。最终目标是让过滤器从完整日历视图中重新加载可选择的“事件名称”选项。
我有这一切工作,但它不同步。
我的 JSP 包含过滤器是这样的:
<div id="popUpFilterInfo" class="filterPopUp">
<s:action name="ScheduleFilter" executeResult="true" id="scheduleFilter"></s:action>
</div>
这将返回另一个包含过滤器表单的 JSP 页面。Struts 在页面渲染时运行,所以这个过滤器是在构建视图之前构建的。当用户选择一个按钮时,这个过滤器会被 jQuery 隐藏/显示。
页面操作与过滤器操作不同,因为此过滤器操作需要包含在多个页面中
加载完整日历后,它将日期发送回页面操作,页面操作将这些日期存储到应用程序全局上下文中的过滤器对象中。
我遇到的问题是,当视图更改时,我无法让页面重新加载过滤器。如果我重新加载整个页面,那么过滤器确实包含来自前一个视图的数据,所以我知道我只需要告诉页面重新呈现 ScheduleFilter 表单。我尝试使用 jQuery 来做到这一点:
var filter = "<s:action name=\"ScheduleFilter\" executeResult=\"true\" id=\"scheduleFilter\"></s:action>";
jQuery('#popUpFilterInfo').children().remove();
jQuery('#popUpFilterInfo').append(filter);
这会在过滤器变量被实例化的行上抛出一个 JasperException 说 'quote symbol expected'。就在“name”中间指定字符“m”是问题所在。
有谁知道如何在不重新加载整个页面的情况下重新加载这样的嵌入式动作?
答案:
正如 Dave 在下面所说,不要将操作嵌入到<s:action>
标签中。我对此进行了切换,而是使用 Ajax 调用该操作,并在成功后使用 jQuery 将返回的数据插入到我的过滤器表单 div 中。我检查了 div 是否为空,如果 div 中已经有过滤器,则清除它。下面是一个例子
我的过滤器 div:
<div id="popUpFilterInfo" class="filterPopUp"></div>
行动号召:
function loadFilter() {
if(!jQuery('#popUpFilterInfo').is(':empty')){
jQuery('#popUpFilterInfo').children().remove();
}
jQuery.ajax({
url:'Filter.action',
data:"",
dataType: "",
type: "GET",
success: function(filter) {
jQuery('#popUpFilterInfo').append(filter);
}
});
}