我使用struts2-jQueryplugin和struts2-json-plugin。
我的问题是,-- jQuery函数在操作类中的动作函数之前执行。
1) onchange=verifyChosenLanguage(this.value).调用在JSP页面上定义的jQuery函数
2)在我的动作类loadLanguages,中定义的动作函数是onChangeTopics="reloadFrameworks".调用的
3)在LanguagesFormAction.java中,定义了布尔变量FrameworksExist。因此,如果DAO函数告诉我它存在所选语言的框架,否则我将FrameworksExist=true,设置为false。因此,在jQuery函数中,我测试FrameworksExist==true还是FrameworksExist==false。
但不幸的是,我注意到的是,在发出“成功”之前,调用了loadLanguages onchange事件。所以我的函数仍然发现FrameworksExist==false.
如何在select触发的动作函数返回字符串(成功)之后执行jQuery函数?
jQuery函数:
function verifyChosenLanguage(value){
var someText = '<s:property value="FrameworksExist"/>';
alert(" FrameworksExist = "+someText+"what"); // this gives me always "false"
}表格的双重选择:
<s:url id="remoteurl1" action="loadLanguages"/>
<sj:select
onchange="verifyChosenLanguage(this.value)"
href="%{remoteurl1}"
label="Category "
id="IdChosenLanguage"
name="IdChosenLanguage"
onChangeTopics="reloadFrameworks"
list="languages"
listKey="lang_id"
listValue="lang_name"
emptyOption="false"
headerKey="None"
headerValue="Select a language"
/>
<s:url id="remoteurl2" action="loadLanguages"/>
<sj:select
href="%{remoteurl2}"
label="Framework "
id="IdChosenFramework"
name="IdChosenFramework"
formIds="formLanguages"
reloadTopics="reloadFrameworks"
list="frameworks"
listKey="frame_id"
listValue="frame_name"
emptyOption="false"
headerKey="None"
headerValue="Select a Framework"
/>LanguagesFormAction.java:
@Actions( {
@Action(value = "/loadLanguages", results = {
@Result(name = "success", type = "json")
})
})
public String loadLanguages(){
// instructions
if ( (languageDAO.countFrameworks(Long.valueOf(IdChosenLanguage)!=0){
FrameworksExist=true;
}
else{
FrameworksExist=false;
}
// instructions
return "success";
}
public String getJSON()
{
return loadLanguages();
}发布于 2012-08-11 19:40:43
在加载FrameworksExist时,将计算jQuery函数中的jQuery值。请记住,您使用了一个常规的struts2属性标记,它不能根据对操作的ajax调用神奇地更改或重新加载其值。
function verifyChosenLanguage(value){
var someText = '<s:property value="FrameworksExist"/>'; // <-- Evaluated on first load of your JSP
alert(" FrameworksExist = "+someText+"what"); // Does not change based on ajax calls
}loadLanguages操作只更改<sj:select>项的值,因为这是它所应用的全部内容。按需要调用loadLanguages,并不会更新JSP页面上的所有值。
编辑:
如果希望从select输入交互中获得FrameworkExists的值,可以通过以下操作订阅适当的主题:
$.subscribe('topicName', function(event,data) {
// Parse for and prcess your FrameworkExists data here as you wish.
});您可以在演示站点上看到带有JSON结果的远程链接示例。
https://stackoverflow.com/questions/11916845
复制相似问题