【问题标题】:wicket:how to get dropdownlist selected value in ListViewwicket:如何在 ListView 中获取下拉列表选择的值
【发布时间】:2012-07-27 05:55:15
【问题描述】:

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

谁能告诉我如何做到这一点。

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

谢谢。

【问题讨论】:

    标签: listview wicket dropdownchoice


    【解决方案1】:

    PropertyModel(this, "attrvalueBizRole")

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

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

    【讨论】:

    • 感谢您的回复。你的意思是我写到同一个字段“attrvalueBizRole”。你认为该怎么做?
    【解决方案2】:

    在添加“ListView”之前添加一个new 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() 中,您必须设置 "data-value" 属性:

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

    在您的 HTML 页面中,您必须在 ListView 之前添加一个 hidden-field

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-09
      • 2011-04-19
      • 2013-06-08
      • 2022-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多