如何通过选中/取消选中selectBooleanCheckbox来重新加载页面?

时间:2011-11-30 11:10:38

标签: ajax jsf-2 richfaces

如何通过选中/取消选中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组件......

2 个答案:

答案 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>的语法相同。唯一的区别是它以不同的方式解析executerender并支持更方便的属性。

另见:

答案 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>

事件是onclickdoThis是要在bean上执行的操作的方法名称。在您的操作中将逻辑呈现为富:日历并且不要忘记使用a4j:support或f:ajax的reRender属性以使日历可见

或者,如果要检查值是否通过ActionEvent对象检查或取消选中,则可以使用actionListener属性。

或者如果你想通过javascript发送请求,你可以使用a4j:jsFunction。 (仅适用于richfaces)

虽然这会触发ajax请求但仍会重新加载页面的一部分。

希望这会有所帮助。 :)