根据模型对象

时间:2016-02-16 15:36:49

标签: wicket

我完全失去了如何继续前进:

我有一个DropDownChoice面板和旁边的提交按钮。根据DropDownChoice的选定值(在触发附加的OnChangeAjaxBehavior时获取,提交按钮需要用另一个替换整个面板,或者成为ExternalLink。

目前,代码如下:

public class ReportSelectionPanel extends Panel {
   protected OptionItem selectedOption ;
   public ReportSelectionPanel(String id) {
       super(id);
       IModel<List<OptionItem>> choices = new AbstractReadOnlyModel() {
        // Create a list of options to be displayed in the DropDownChoice
       } ;

       final IModel<OptionItem> optionModel = 
            new PropertyModel<OptionItem>(this,"selectedOption") ;

       final DropDownChoice<OptionItem> options = 
            new DropDownChoice("selectChoice",optionModel,choices) ;

       // I don't know what the button should be... Plain Button? A Link?
       final Component button = ???

       options.add( new OnChangeAjaxBehavior()  { 
             protected void onUpdate(AjaxRequestTarget target) {

                  if ( selectedOption.getChild() == null ) {
                        // button becomes an ExternalLink.
                        // A new window will popup once button is clicked
                   } else {
                      // button becomes a Something, and upon clicking,
                      // this ReportSelectionPanel instance gets replaced by
                      // an new Panel instance, the type of which is
                     //  selectedOption.getChild() 
             }
       } ) ;

我真的不太清楚注释行应该达到什么结果。有什么建议?

谢谢!

埃里克

1 个答案:

答案 0 :(得分:0)

恕我直言,保留一个按钮并根据所选选项做出不同反应更好:

final Component button = new AjaxButton("button") {
    public void onClick(AjaxRequestTarget target) {
        if (selectedOption.getChild() == null) {
            PopupSettings popup = new PopupSettings();
            popup.setTarget("'" + externalUrl + "'");
            target.appendJavascript(popup.getPopupJavaScript());
        } else {
            ReportSelectionPanel.this.replaceWith(new ReportResultPanel("..."));
        }
    }  
};

// not needed if options and button are inside a form
// options.add( new OnChangeAjaxBehavior() { } ) ;