wicket:如何在ListView中获取dropdownlist选择的值

时间:2012-07-27 05:55:15

标签: listview wicket dropdownchoice

我有一个页面,有一些下拉列表。当页面加载时,符合列表,会显示一些下拉列表。现在想要获取列表视图中的下拉列表选择值,但我无法获得下拉列表选择的值。我该怎么做才能获得这个价值?

任何人都可以告诉我如何实现这一目标。

html代码:

<table>
    <tr wicket:id="tritems">
        <th align="right"><span wicket:id="lblattr"></span></th>
        <td><select wicket:id="attrvalue"></select></td>
    </tr>
    <tr><th align="right"><wicket:message key="targetsystem" /></th><td><select wicket:id="targetsystem" /></td></tr>
</table>

java代码:

final ListView trView=new ListView("tritems", new PropertyModel(this, "attrBizRoles")) { 
        private IBizRole attrvalueBizRole=new BizRole();    

        @Override 
        protected void populateItem(ListItem item) { 
                attrBizRole = (IBizRole) item.getModelObject(); 
                item.add(new Label("lblattr", attrBizRole.getName())); 
                // this list can get from attr 
                attrvalueBizRoles = (List<IBizRole>) attrBizRole.getChildBizRole(); 
                if (attrvalueBizRoles.size()>0) { 
                        attrvalueBizRole=attrvalueBizRoles.get(0); 
                } 
                DropDownChoice attrvalueChoice = new DropDownChoice("attrvalue",new PropertyModel<IBizRole>(this, "attrvalueBizRole"), attrvalueBizRoles,new IChoiceRenderer() { 

                        @Override 
                        public Object getDisplayValue(Object object) { 
                                attrvalueBizRole = (IBizRole) object; 
                                return attrvalueBizRole.getName(); 
                        } 

                        @Override 
                        public String getIdValue(Object object, int index) { 
                                attrvalueBizRole = (IBizRole) object; 
                                return String.valueOf(attrvalueBizRole.getId()); 
                        } 
                }); 
                item.add(attrvalueChoice); 
        } 
}; 

感谢。

2 个答案:

答案 0 :(得分:0)

PropertyModel(this,“attrvalueBizRole”)

似乎所有项目都写入列表视图的相同字段“attrvalueBizRole”。这可能不是你想要的。

你的IBizRole有没有属性,你可以直接绑定下拉列表吗?

答案 1 :(得分:0)

在添加“ListView”之前添加新的HiddenField 。它将存储选定的值:

//Note:: your model have to have "getRowSelected()" and "setRowSelected()" methods and "String rowSelected" field...  
add(new HiddenField<String>("rowSelected", new PropertyModel<String>(getModelObject(), "rowSelected"))){    
        @Override
        protected void onInitialize() {
            add(new AjaxFormComponentUpdatingBehavior("change") {

                @Override
                protected void onEvent(AjaxRequestTarget target) {
                    getValue();//This method will return your selected value
                }
            });
        }
    });

在populateItems()中,您必须设置“数据值”属性:

@Override 
protected void populateItem(ListItem item) { 
    //TODO::
    item.add(new AttributeModifier("data-value",attrvalueBizRole.getId())
    //TODO::
} 

在您的HTML页面中,您必须在ListView之前添加隐藏字段

<input type="hidden" name="rowSelected" wicket:id="rowSelected"/>//<--
<tr wicket:id="tritems">
    <th align="right"><span wicket:id="lblattr"></span></th>
    <td><select wicket:id="attrvalue"></select></td>
</tr>