h:selectBooleanCheckbox valueChangeListener不起作用

时间:2011-08-01 14:31:06

标签: jsf ajax4jsf

我遇到valueChangeListener h:selectBooleanCheckbox的问题。我有以下代码块:

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:a4j="http://richfaces.org/a4j"
    xmlns:rich="http://richfaces.org/rich">
    <link href="../css/profile.css" rel="stylesheet" type="text/css" />
    <link href="../css/style.css" rel="stylesheet" type="text/css" />
    <link href="../css/twt.css" rel="stylesheet" type="text/css" /> 
    <script language="JavaScript" src="../js/custom-form-elements.js"></script>
    <a4j:form id="userList">
        <a4j:outputPanel id="userListPanel" rendered="#{popupController.iIndex >= 0}">          
            <div id="listPopup_#{popupController.iIndex}" 
                style="width: 202px; height: 235px; position: absolute; right: 0%; display: none; z-index: 10000; 
                background-image: url('../images/Alert/createNewListBack.gif'); background-repeat: no-repeat;">
                <table width="180" cellpadding="0" cellspacing="0" height="100%" style="margin-top: 6px; margin-left: 10px;">
                    <a4j:repeat id="userListRepeat" value="#{popupController.userList}" rowKeyVar="i" var="listByUser">
                        <tr>
                            <td valign="middle" align="center" width="35" style="padding-left: 8px;">                               
                                <h:selectBooleanCheckbox id="listCheckbox_#{i}" name="listCheckbox_#{i}"                                                                        
                                valueChangeListener="#{popupController.addUserListMember}" immediate="true">

                            </h:selectBooleanCheckbox>
                            </td>
                            <td valign="middle" align="left" class="alertSelect" width="145">
                                <div style="width: 170px; height: auto; word-wrap: break-word; white-space: pre-wrap;">
                                    <h:outputText style="padding-right: 8px;" value="#{listByUser.name}" />                                 
                                </div>                              
                            </td>
                        </tr>                                           
                    </a4j:repeat>                   
                </table>    
            </div>          
        </a4j:outputPanel>
    </a4j:form>

</ui:composition>

PopupController的addUserListMember是

public void addUserListMember(ValueChangeEvent event) throws Exception {
    System.out.println("=========================== PopupController.addUserListMember() ==================");
    Boolean isChecked = (Boolean) event.getNewValue();
    if(isChecked) {
        System.out.println("===== Checked =====");                                              
    } else {
        System.out.println("===== Un Checked =====");
    }                
}

valuechangelistner无效。我无法使用this.form.submit(),因为它不适合代码。我在jsf 1.2。

补救措施是什么?谢谢。

1 个答案:

答案 0 :(得分:6)

valueChangeListener不是客户端事件/事件。它完全是服务器端。在更改值之后,您应该将表单提交到服务器端以便调用它。

由于您显然已经在使用Ajax4jsf,因此您只需添加<a4j:support>

<h:selectBooleanCheckbox ...>
    <a4j:support event="onclick" reRender="someOtherComponentIfNecessary" />
</h:selectBooleanCheckbox>