好的,我会尝试尽可能简短易懂。
我正在使用JQuery完整日历并向用户显示事件。我在页面上有一个Filter操作,允许用户根据不同的标准过滤显示的事件。其中一个标准是事件名称。最终目标是让过滤器从完整日历视图重新加载可选择的“事件名称”选项。
我这一切都有效,但它不同步。
我的JSP包含过滤器是这样的:
<div id="popUpFilterInfo" class="filterPopUp">
<s:action name="ScheduleFilter" executeResult="true" id="scheduleFilter"></s:action>
</div>
这将返回另一个包含Filter Form的JSP页面。 Struts在页面渲染时运行,因此在构建视图之前构建此过滤器。然后,当用户选择按钮时,使用jQuery隐藏/显示此过滤器。
Page Action与Filter Action不同,因为此Filter Action需要包含在多个页面中
在完整日历载入之后,它将其日期发送回页面操作,该操作将这些日期存储到应用程序的全局上下文中的过滤器对象中。
我遇到的问题是,当视图发生变化时,我无法让页面重新加载过滤器。如果我重新加载整个页面,那么过滤器确实包含上一个视图中的数据,所以我知道我只需要告诉页面重新呈现ScheduleFilter表单。我尝试用jQuery做到这一点:
var filter = "<s:action name=\"ScheduleFilter\" executeResult=\"true\" id=\"scheduleFilter\"></s:action>";
jQuery('#popUpFilterInfo').children().remove();
jQuery('#popUpFilterInfo').append(filter);
这会抛出一个JasperException,在实例化过滤器变量的行上说'expect symbols expected'。在'name'中间,指定字符'm'是问题所在。
有没有人知道如何在不重新加载整个页面的情况下重新加载这样的嵌入式操作?
ANSWER :
正如Dave在下面所说,不要使用<s:action>
标记嵌入动作。我切换了这个,而是用Ajax调用动作,并且成功后,我使用jQuery将返回的数据插入到我的Filter表单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);
}
});
}
答案 0 :(得分:1)
我代表@ Nathan24发布了这个答案。
正如Dave在下面所说的那样,不要在标签中嵌入动作。我切换了这个,而是用Ajax调用动作,并且成功后,我使用jQuery将返回的数据插入到我的Filter表单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);
}
});
}
我认为这可能对其他人发布这个作为答案有用,所以人们不会错过这个问题。如果我错了,请告诉我,我会删除这个答案。谢谢。