2

我有一个页面,有一些下拉列表。加载页面时,根据列表,将显示一些下拉列表。现在想在列表视图中获取下拉列表选择的值,但我无法获得下拉选择选择的值。我该怎么做做得到这个值?

谁能告诉我如何实现这一目标。

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>

爪哇代码:

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); 
        } 
}; 

谢谢。

4

2 回答 2

0

PropertyModel(this, "attrvalueBizRole")

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

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

于 2012-07-27T07:50:20.293 回答
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>
于 2018-03-05T16:31:20.307 回答