我使用 struts2-jquery-plugin 和 struts2-json-plugin。
我的问题是jQuery 函数在我的动作类中的动作函数之前执行。
1) 我的 JSP 页面上定义的 jQuery 函数由onchange=verifyChosenLanguage(this.value)调用。
2)在我的动作类 LanguagesForm.java 中定义的动作函数是loadLanguages,它由onChangeTopics="reloadFrameworks"调用。
3) 在 LanguagesFormAction.java 中,我定义了一个布尔变量 FrameworksExist。因此,如果 DAO 函数告诉我它存在所选语言的框架,我设置FrameworksExist=true,否则为 false。因此,在 jQuery 函数中,我测试 FrameworksExist==true 或 FrameworksExist==false。
但不幸的是,我注意到事件onchange 在 loadLanguages 发送“成功”之前被调用。所以我的函数仍然发现 FrameworksExist==false。
在选择触发的操作函数的返回字符串(成功)之后,我该怎么做才能执行我的 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();
}