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 かどうかをテストします。
しかし、残念なことに、loadLanguages が「成功」を送信する前に onchange イベントが呼び出されることに気付きました。そのため、私の関数は引き続き 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();
}