JSF selectOneListBox监听器不会被触发

时间:2013-06-19 08:13:11

标签: jsf-2 listener

我到处搜索但找不到我的问题的答案,所有问题和答案都与selectOneMenu有关。我在我的页面中使用了selectOneListbox组件,如下所示

<h:selectOneListbox id="basic" value="#{location.selectedCategory}" style="width: 400px; border: none;" >                                                                                   
    <f:selectItems value="#{location.categories}" var="y" itemLabel="#{y.title} (#{y.itemCount})" itemValue="#{y}" />
    <f:ajax listener="#{location.onNodeSelect}"/>
    <f:ajax render="itemsPanel" execute="@this"/>
</h:selectOneListbox>  

我的豆,

  @ManagedBean(name = "location")    
  @SessionScoped    
  public class LocationServiceBean extends BaseService implements Serializable{

    public void onNodeSelect(AjaxBehaviorEvent event) {  
       log.info("Entering method : onNodeSelect : ");
       if(null != selectedCategory){
        GetCategoriesAndItemsResponse response =getLocationSupport().getItemsByCategoryAndLocation(selectedCategory.getId(), selectedLocationId);
            if(response.getStatusCode().equals("0"))
            {
                items = response.getData().getItems();
                log.info("Items size: " + items.size());
            }
        }
    } 
}

问题在于,当我在列表框中选择项目时,selectOneListBox中的上述侦听器不会被触发。尝试使用primeface(3.5)组件,但没有运气。

更新:添加更多代码

<h:form id="venuForm" prependId="false">
                                                    <legend>2. Choose Venue</legend>
                                                    <div class="control-group">
                                                        <label class="span3" for="Country">Venue</label>

                                                        <div class="controls">
                                                            <h:selectOneMenu value="#{location.selectedLocationId}" id="select01" required="true"
                                                                requiredMessage="Location is a mandatory field" styleClass="span8">
                                                                <f:selectItem itemValue="#{null}" itemLabel="Select Location" noSelectionOption="true" />
                                                                <f:selectItems value="#{location.allLocations}" var="c" itemLabel="#{c.title}" itemValue="#{c.locationId}" />
                                                                <f:ajax listener="#{location.loadCategoriesListner}" render=":itemForm:categoriesPanel" execute="@this" />
                                                                <f:ajax execute="@this" render=":itemForm:itemsPanel" />
                                                            </h:selectOneMenu>
                                                        </div>
                                                    </div>
                                                </h:form>
                                                <h:form id="itemForm" prependId="false">
                                                    <legend>3. Choose Gift</legend>
                                                    <div class="control-group">

                                                        <p:outputPanel id="panel" autoUpdate="true">
                                                            <div style="padding-left: 5px; padding-right: 5px; padding-bottom: 5px; border: none;">
                                                                <p:panel id="categoriesPanel" rendered="#{location.categories != null}" autoUpdate="true" style=" border: none;">
                                                                    <h:selectOneListbox id="basic"  value="#{location.selectedCategory}" style="width: 400px; border: none;">

                                                                        <f:selectItems value="#{location.categories}" var="y" itemLabel="#{y.title} (#{y.itemCount})" itemValue="#{y}" />
                                                                        <f:ajax listener="#{location.onNodeSelect}" render="itemsPanel" execute="@form" event="change"/>
                                                                    </h:selectOneListbox>

                                                                </p:panel>
                                                            </div>
                                                        </p:outputPanel>
                                                        <div class="clear" style="height: 30px;"></div>

                                                        <div style="padding-bottom: 5px; padding-top: 5px;">
                                                            <p:panel id="itemsPanel" style="float: left;" header="Items">
                                                                <ui:repeat value="#{location.items}" var="o" id="itemTable">

                                                                    <div style="width: 170px; height: 200px; margin: auto; float: left; border-style: solid; border-color: #ECE5B6; border-width: thin;">
                                                                        <div style="margin: 5px; padding: 5px;">
                                                                            <div style="margin-bottom: 5px;">
                                                                                <h:outputText value="#{fnc:getTitleTruncateText(o.title)}"  style="margin: 0 auto;  padding: 0 0 20px; color: #9A1326; width: 100px; font-size: 14px; text-align: center;" />
                                                                                <BR />
                                                                            </div>

                                                                            <div style="padding-left: 45px; margin-bottom: 5px;">
                                                                                <h:graphicImage value="http://dev.cdn.abc.com/#{o.imageId}_3.png" id="itemImage" alt="#{o.title}" />
                                                                            </div>
                                                                            <div
                                                                                style="padding: 5px 10px; background-color: #FFC200; margin: 15px auto 0 auto; width: 100px; text-align: center; color: #29000F; border: 1px solid #F2BD00;">
                                                                                <h:outputText value="$ #{fnc:formatDoubleValue(o.salePrice)}" />
                                                                            </div>

                                                                            <div class="clear" style="height: 5px;"></div>
                                                                            <div style="float: left;">
                                                                                <div style="float: left; margin-right: 50px;">
                                                                                    <p:spinner id="itemQty" value="#{o.selectedQty}" size="3" min="1" max="#{o.qtyAvailable}" style="width: 20px;" />
                                                                                </div>

                                                                                <div style="float: right;">
                                                                                    <h:commandButton value="Add" id="addToCartBtn"  rendered="#{o.qtyAvailable > 0 }" actionListener="#{location.addItemToCart(o)}" />
                                                                                </div>
                                                                            </div>
                                                                        </div>
                                                                    </div>
                                                                </ui:repeat>
                                                            </p:panel>
                                                        </div>

                                                        <div class="clear" style="height: 30px;"></div>
                                                        <div style="float: right;">
                                                            <h:commandButton action="#{location.gotoUserDetails}" value="Next" onclick="return(validate());" rendered="#{!empty location.selectedItems}" />
                                                        </div>

                                                    </div>
                                                </h:form>

1 个答案:

答案 0 :(得分:1)

问题在于转换器。问题可以通过从jsf组件获取原始类型值(即整数,字符串...),或为类创建自定义转换器并在组件(属性:转换器)中引用它来解决。