如何通过选中/取消选中selectBooleanCheckbox来重新加载页面(并更新模型值)?
@Ellie:我尝试了<a4j:ajax event="click" action="doiListView"/>
和<f:ajax event="click" action="doiListView"/>
,但没有任何反应。 (代码)代码是:
<td style="font-size: 5pt; border: 0; min-width:60px">
<rich:calendar id="creationToDate" value="#{listModel.creationDate.rangeEnd}"
datePattern="yyyy-MM-dd" enableManualInput="true"
rendered="#{listModel.creationDate.range}"
valueChangeListener="#{listController.filterFieldChanged}">
</rich:calendar>
</td>
<td rowspan="2">
<h:selectBooleanCheckbox value="#{listModel.creationDate.range}">
<a4j:ajax event="click" action="doiListView"/>
</h:selectBooleanCheckbox>
</td>
如果选中该复选框,则应该可以看到日期选择器。但是根据你的提示,没有任何反应...... 如果我添加onclick =&#34; window.location.href = window.location.href&#34;在selectBooleanCheckbox标签中,它可以工作,但正如我所说,我想尽可能使用RF组件......
答案 0 :(得分:6)
你的问题不是很具体。但据我所知,您基本上想要提交整个表单并重新加载整个页面(为什么不只是表单?)。
在这种情况下,您需要将execute
属性设置为@form
,以便提交整个表单(默认为@this
,当前组件)并且您还需要需要将render
属性设置为@all
,以便重新呈现整个视图(或者只使用@form
重新呈现表单就足够了。)
<h:selectBooleanCheckbox value="#{listModel.creationDate.range}">
<f:ajax event="click" execute="@form" render="@all" />
</h:selectBooleanCheckbox>
event="click"
在上面的构造中是可选的。它已经是<h:selectBooleanCheckbox>
的默认ajax事件。你可以离开它:
<h:selectBooleanCheckbox value="#{listModel.creationDate.range}">
<f:ajax execute="@form" render="@all" />
</h:selectBooleanCheckbox>
此外,您的action
属性无效。它不存在。如果您确实想在调用操作阶段调用方法,则需要使用listener
属性。
<h:selectBooleanCheckbox value="#{listModel.creationDate.range}">
<f:ajax execute="@form" listener="#{listModel.rangeListener}" render="@all" />
</h:selectBooleanCheckbox>
与
public void rangeListener() {
// ...
}
或者,如果您需要能够broadcast events:
public void rangeListener(AjaxBehaviorEvent event) {
// ...
}
<a4j:ajax>
的语法相同。唯一的区别是它以不同的方式解析execute
和render
并支持更方便的属性。
答案 1 :(得分:1)
如果您使用richfaces或嵌套在selectBooleanCheckbox中的a4j:support
jsf然后将事件属性指定为onchange或onclick,则可以使用f:ajax
,然后在触发事件时将调用的action属性。
示例:
<h:selectBooleanCheckbox value="#{listModel.creationDate.range}">
<a4j:support event="onclick" action="#{beanName.doThis}" reRender="calendarID"/>
</h:selectBooleanCheckbox>
事件是onclick
,doThis
是要在bean上执行的操作的方法名称。在您的操作中将逻辑呈现为富:日历并且不要忘记使用a4j:support或f:ajax的reRender属性以使日历可见
或者,如果要检查值是否通过ActionEvent对象检查或取消选中,则可以使用actionListener属性。
或者如果你想通过javascript发送请求,你可以使用a4j:jsFunction。 (仅适用于richfaces)
虽然这会触发ajax请求但仍会重新加载页面的一部分。
希望这会有所帮助。 :)