我有一个按钮。如果按此按钮,则应显示一个复选框
这当然很有效。复选框应该在更改时调用一个函数,该函数应该只是System.out.println()
,所以我看到它被调用。
问题是:只是简单的复选框功能,没有重新渲染工作很好。但是一旦a4j:support
被重新渲染,它就无法正常工作,System.out.println()
永远不会被调用
这看起来很简单,但我不知道为什么它根本不起作用!
任何提示/技巧?
这是旧环境,所以只有JSF 1.2。
我的xhtml
<s:div id="sdBoolCheckboxtest">
#{testController.testRerenderBool}
<s:div id="sdRerender" rendered="#{testController.testRerenderBool}">
<h:selectBooleanCheckbox id="myscheckbox" value="#{testController.testBool}">
<a4j:support ajaxSingle="true" event="onclick" immediate="true"
status="globalStatus" action="#{testController.testCheckbox()}" />
</h:selectBooleanCheckbox>
</s:div>
</s:div>
</h:form>
我的Java课程:
@Name("testController")
@AutoCreate
public class TestController {
private boolean testBool = false;
public boolean isTestRerenderBool() {
return testRerenderBool;
}
public void setTestRerenderBool(boolean testRerenderBool) {
this.testRerenderBool = testRerenderBool;
}
private boolean testRerenderBool;
public void switchtestRerenderBool(){
System.out.println("switch");
testRerenderBool = !testRerenderBool;
}
public void testCheckbox(){
System.out.println("drin");
}
public boolean isTestBool() {
return testBool;
}
public void setTestBool(boolean testBool) {
this.testBool = testBool;
}
}
答案 0 :(得分:0)
好的,我通过这些改变让它发挥作用:
首先我将@Scope(ScopeType.CONVERSATION)
添加到TestController
@Name("testController")
@AutoCreate
@Scope(ScopeType.CONVERSATION)
public class TestController {
...
}
作为第二个更改,我将<s:div
更改为<a4j:outputPanel
<a4j:outputPanel id="sdBoolCheckboxtest">
这解决了我的问题,但我仍然想知道为什么我需要@Scope(ScopeType.CONVERSATION)
(我发现了a4j的提示:outputPanel here)
任何解释都会有所帮助,谢谢!