which type does result.getReturnValue() got, And how could I set it in the backend.
在 8/14/14, 21:57, "Vojtech Szocs" <vsz...@redhat.com> 写入: > > >----- Original Message ----- >> From: "Leaboy" <wlblea...@126.com> >> To: "Vojtech Szocs" <vsz...@redhat.com> >> Cc: devel@ovirt.org >> Sent: Thursday, August 14, 2014 2:12:37 PM >> Subject: Re: [ovirt-devel] popup dialog >> >> Hi: >> you said that ,I have done, and the dialog >> Can display, and I can pass a parameter from dialog >> To the backend executeCommand(). >> >> Now the question is, after executeCommand(), >> Hou could I get the return value in the frontend. >> >> For example, when I clicked backup button, >> A dialog is display, now I type some parameters into >> The dialog, click OK button, the backend executeCommand() >> Do something, now, I need some value from executeCommand() >> to frontend. > >Sorry, I missed that your question was about executing backend >command (I thought you referred to Model.executeCommand) ... > >Backup dialog's OK button is represented by: > > UICommand tempVar = new UICommand("OnBackup", this); > >When user clicks OK button, that ^^ UICommand is executed. >Model's executeCommand should route flow to some onBackup() >method, I assume you already did this: > > // inside TemplateListModel#executeCommand > ... > else if ("OnBackup".equals(command.getName())) { > onBackup(); > } > ... > > // inside TemplateListModel > private void onBackup() { > TemplateBackupModel windowModel = (TemplateBackupModel) getWindow(); > > // do nothing if windowModel is already doing something -or- if > // windowModel validation failed (i.e. bad/missing user input) > if (windowModel.getProgress() != null || !windowModel.validate()) { > return; > } > > // this replaces dialog content UI with "progress" animated image > // to indicate that a call to backend is about to be initiated > windowModel.startProgress(null); > > // on backend, assume you have TemplateBackupCommand that works > // with parameter type TemplateBackupParameters > TemplateBackupParameters params = new TemplateBackupParameters(); > // update params according to window model > params.setFoo(windowModel.getFoo().getEntity()); > > // this is the async callback executed when backend command > // (TemplateBackupCommand in our case) has done its job > IFrontendActionAsyncCallback callback = new >IFrontendActionAsyncCallback() { > @Override > public void executed(FrontendActionAsyncResult result) { > TemplateListModel listModel = (TemplateListModel) >result.getState(); > listModel.postOnBackup(result.getReturnValue()); > } > }; > > // call backend > Frontend.getInstance().runAction( > VdcActionType.TemplateBackup, params, callback, this); > } > > // still inside TemplateListModel > private void postOnBackup(VdcReturnValueBase returnValue) { > // at this point, backend has replied with returnValue, > // we can remove "progress" animated image in dialog > getWindow().stopProgress(); > > // if the backend operation was successful, close the > // dialog (otherwise the dialog will remain open) > if (returnValue != null && returnValue.getSucceeded()) { > setWindow(null); > } > } > >Regards, >Vojtech > > >> >> >> 在 8/14/14, 19:48, "Vojtech Szocs" <vsz...@redhat.com> 写入: >> >> > >> > >> >----- Original Message ----- >> >> From: "Leaboy" <wlblea...@126.com> >> >> To: "Vojtech Szocs" <vsz...@redhat.com> >> >> Cc: devel@ovirt.org >> >> Sent: Thursday, August 14, 2014 6:19:17 AM >> >> Subject: Re: [ovirt-devel] popup dialog >> >> >> >> Hi,Vojtech Szocs: >> >> Thanks for your help, I have let it work, >> >> >> >> The Error I got just because I miss the step 3 you noted. >> >> >> >> Another question is how could I got the returnValue after >> >> executeCommand , and let the returnValue display on the oher >> >> Popup dialog. >> > >> >Please add this into MainTabTemplateView: >> > >> > ... >> > getTable().addActionButton(new >> >WebAdminButtonDefinition<VmTemplate>(constants.templateBackup()) { >> > @Override >> > protected UICommand resolveCommand() { >> > return getMainModel().getTemplateBackupCommand(); >> > } >> > }); >> > ... >> > >> >This adds a button under "Template" main tab. When clicked, it executes >> >given command (getTemplateBackupCommand) on model (TemplateListModel). >> > >> >Model's executeCommand() ensures that backup() method is called. Inside >> >backup() method, you call setWindow(model) which triggers an event - UI >> >infra handles this event and uses "getModelPopup" (see TemplateModule) >> >to resolve "window model" to GWTP PresenterWidget which is then >>revealed >> >as popup. This is how dialogs work in UiCommon / UI (GWTP) infra. >> > >> >> how could I got the returnValue after executeCommand >> > >> >As I wrote above, executeCommand() just calls appropriate method (like >> >backup) on the list model. That method has no return value (void) since >> >it uses setWindow(model) to trigger event to notify UI infra to reveal >> >a dialog. >> > >> >If you need to pass data to dialog, for example: >> > >> > ... >> > TemplateBackupModel model = new TemplateBackupModel(); >> > setWindow(model); >> > ... set window model's title, help tag, hash name ... >> > model.setSomeData(abc); >> > model.doSomething(); >> > ... >> > >> >In other words, after you call setWindow(model) you can modify state >> >of window model (TemplateBackupModel) which can be reflected into UI >> >(TemplateBackupPopupView) by use of editor widgets. >> > >> >As for binding window model's (TemplateBackupModel) attributes to UI >> >(TemplateBackupPopupView) fields: >> > >> > // inside TemplateBackupModel >> > private EntityModel<String> foo; >> > public EntityModel<String> getFoo() { >> > return foo; >> > } >> > public void setFoo(EntityModel<String> value) { >> > foo = value; >> > } >> > >> > // inside TemplateBackupPopupView >> > @UiField >> > @Path(value = "foo.entity") >> > StringEntityModelTextBoxEditor fooEditor; >> > >> >Please see DataCenterPopupView.java & DataCenterPopupView.ui.xml >> >(simple dialog view as example) for details. >> > >> >Regards, >> >Vojtech >> > >> >> >> >> >> >> 在 8/14/14, 0:07, "Vojtech Szocs" <vsz...@redhat.com> 写入: >> >> >> >> >Hi, >> >> > >> >> >forgot to mention, one more thing needs to be done: >> >> > >> >> > // in PresenterModule >> >> > bindPresenterWidget(TemplateBackupPopupPresenterWidget.class, >> >> > TemplateBackupPopupPresenterWidget.ViewDef.class, >> >> > TemplateBackupPopupView.class); >> >> > >> >> >(Above binds popup PresenterWidget/View within GIN DI context.) >> >> > >> >> >Regards, >> >> >Vojtech >> >> > >> >> > >> >> >----- Original Message ----- >> >> >> From: "Vojtech Szocs" <vsz...@redhat.com> >> >> >> To: "力波 王" <wlblea...@126.com> >> >> >> Cc: devel@ovirt.org >> >> >> Sent: Wednesday, August 13, 2014 6:00:08 PM >> >> >> Subject: Re: [ovirt-devel] popup dialog >> >> >> >> >> >> Hi, >> >> >> >> >> >> in order to add new dialog, follow these steps: >> >> >> >> >> >> 1, create UiCommon model for the dialog, I see you already did >>this >> >> >> (TemplateBackupModel) - however from your code I don't >>understand >> >> >> why is there an unused "_asyncQuery" inside model constructor >> >> >> >> >> >> 2, modify existing list model to trigger your new dialog, I see >>you >> >> >> also did this (second code snippet), I assume you put that code >> >> >> inside TemplateListModel: >> >> >> >> >> >> // inside TemplateListModel#backup - this method should be >>private >> >> >> // since UI code executes this method via associated UICommand >> >> >> ... >> >> >> TemplateBackupModel model = new TemplateBackupModel(); >> >> >> setWindow(model); >> >> >> >> >> >> >>>>>>model.setTitle(ConstantsManager.getInstance().getConstants().template >>>>>>Ba >> >>>>ck >> >> >>upTitle()); >> >> >> model.setHelpTag(HelpTag.template_backup); >> >> >> model.setHashName("template_backup");//$NON-NLS-1$ >> >> >> ... >> >> >> >> >> >> now, expose UICommand that triggers your dialog like this: >> >> >> >> >> >> public UICommand getTemplateBackupCommand() { >> >> >> return privateTemplateBackupCommand; >> >> >> } >> >> >> >> >> >> private void setTemplateBackupCommand(UICommand value) { >> >> >> privateExportCommand = value; >> >> >> } >> >> >> >> >> >> // inside TemplateListModel constructor >> >> >> ... >> >> >> setTemplateBackupCommand(new UICommand("TemplateBackup", this)); >> >> >> //$NON-NLS-1$ >> >> >> ... >> >> >> >> >> >> // inside TemplateListModel#executeCommand >> >> >> ... >> >> >> else if (command == getTemplateBackupCommand()) { >> >> >> backup(); >> >> >> } >> >> >> ... >> >> >> >> >> >> 3, tell UI (GWTP) infra how to handle your dialog model - in this >> >> >> particular case, edit TemplateModule#getTemplateListProvider: >> >> >> >> >> >> ... >> >> >> if (lastExecutedCommand == model.getEditCommand()) { >> >> >> return popupProvider.get(); >> >> >> } else if (lastExecutedCommand == >>getModel().getExportCommand()) { >> >> >> return exportPopupProvider.get(); >> >> >> } else if (lastExecutedCommand == >> >> >>getModel().getTemplateBackupCommand()) { >> >> >> return templateBackupProvider.get(); >> >> >> } else { >> >> >> return super.getModelPopup(source, lastExecutedCommand, >> >> >>windowModel); >> >> >> } >> >> >> ... >> >> >> >> >> >> now, add parameter to TemplateModule#getTemplateListProvider: >> >> >> >> >> >> @Provides >> >> >> @Singleton >> >> >> public MainModelProvider<VmTemplate, TemplateListModel> >> >> >> getTemplateListProvider( >> >> >> ... >> >> >> final Provider<TemplateBackupPopupPresenterWidget> >> >> >> templateBackupPopupProvider) { >> >> >> ... >> >> >> >> >> >> 4, create PresenterWidget & View for your dialog, this is the >>visual >> >> >> part of the dialog (dialog model just encapsulates the dialog >> >>logic) >> >> >> >> >> >> public class TemplateBackupPopupPresenterWidget extends >> >> >> AbstractModelBoundPopupPresenterWidget<TemplateBackupModel, >> >> >> TemplateBackupPopupPresenterWidget.ViewDef> { >> >> >> >> >> >> public interface ViewDef extends >> >> >> >> >>AbstractModelBoundPopupPresenterWidget.ViewDef<TemplateBackupModel> >> >> >>{ >> >> >> } >> >> >> >> >> >> @Inject >> >> >> public TemplateBackupPopupPresenterWidget(EventBus eventBus, >> >>ViewDef >> >> >> view) { >> >> >> super(eventBus, view); >> >> >> } >> >> >> >> >> >> } >> >> >> >> >> >> --- >> >> >> >> >> >> public class TemplateBackupPopupView extends >> >> >> AbstractModelBoundPopupView<TemplateBackupModel> implements >> >> >> TemplateBackupPopupPresenterWidget.ViewDef { >> >> >> >> >> >> // you can get some inspiration from VmExportPopupView >> >> >> >> >> >> } >> >> >> >> >> >> 5, you are done :) >> >> >> >> >> >> Vojtech >> >> >> >> >> >> >> >> >> ----- Original Message ----- >> >> >> > From: "力波 王" <wlblea...@126.com> >> >> >> > To: devel@ovirt.org >> >> >> > Sent: Tuesday, August 12, 2014 7:57:24 AM >> >> >> > Subject: [ovirt-devel] popup dialog >> >> >> > >> >> >> > Hi, everyone: >> >> >> > I add a button, named backup in the Template Tab, >> >> >> > And the click event is ok. >> >> >> > Now I want add a dialog after clicked the button, >> >> >> > So, I add a model , but the dialog didn’t display at all. >> >> >> > >> >> >> > So, I want to know is there some necessary class need >> >> >> > To modify or add? >> >> >> > >> >> >> > The model code is like this: >> >> >> > TemplateBackupModel.java >> >> >> > ======================================================== >> >> >> > public class TemplateBackupModel extends Model { >> >> >> > >> >> >> > private EntityModel privatePassword; >> >> >> > >> >> >> > public EntityModel getPassword() >> >> >> > { >> >> >> > return privatePassword; >> >> >> > } >> >> >> > >> >> >> > public void setPassword(EntityModel value) >> >> >> > { >> >> >> > privatePassword = value; >> >> >> > } >> >> >> > >> >> >> > public TemplateBackupModel(){ >> >> >> > >> >> >> > setPassword(new EntityModel()); >> >> >> > >> >> >> > AsyncQuery _asyncQuery = new AsyncQuery(); >> >> >> > _asyncQuery.setModel(this); >> >> >> > _asyncQuery.asyncCallback = new INewAsyncCallback() { >> >> >> > @Override >> >> >> > public void onSuccess(Object model, Object result) >> >> >> > { >> >> >> > >> >> >> > } >> >> >> > }; >> >> >> > >> >> >> > } >> >> >> > >> >> >> > @Override >> >> >> > public void eventRaised(Event ev, Object sender, EventArgs >>args) { >> >> >> > super.eventRaised(ev, sender, args); >> >> >> > } >> >> >> > >> >> >> > public boolean validate(){ >> >> >> > return true; >> >> >> > } >> >> >> > } >> >> >> > ======================================================== >> >> >> > >> >> >> > And created a model in the backup button click callback like >>this: >> >> >> > ======================================================== >> >> >> > public void backup() >> >> >> > { >> >> >> > >> >> >> > if (getWindow() != null) >> >> >> > { >> >> >> > return; >> >> >> > } >> >> >> > >> >> >> > TemplateBackupModel model = new TemplateBackupModel(); >> >> >> > setWindow(model); >> >> >> > model.setTitle("TemplateBackup");//$NON-NLS-1$ >> >> >> > model.setHashName("TemplateBackup");//$NON-NLS-1$ >> >> >> > >> >> >> > >> >> >> > UICommand tempVar = new UICommand("OnBackup", this); >>//$NON-NLS-1$ >> >> >> > >> >>tempVar.setTitle(ConstantsManager.getInstance().getConstants().ok()); >> >> >> > tempVar.setIsDefault(true); >> >> >> > model.getCommands().add(tempVar); >> >> >> > UICommand tempVar2 = new UICommand("Cancel", this); >>//$NON-NLS-1$ >> >> >> > >> >> >> >>>>>>tempVar2.setTitle(ConstantsManager.getInstance().getConstants().cance >>>>>>l( >> >>>>)) >> >> >>; >> >> >> > tempVar2.setIsCancel(true); >> >> >> > model.getCommands().add(tempVar2); >> >> >> > >> >> >> > } >> >> >> > ======================================================== >> >> >> > >> >> >> > _______________________________________________ >> >> >> > Devel mailing list >> >> >> > Devel@ovirt.org >> >> >> > http://lists.ovirt.org/mailman/listinfo/devel >> >> >> _______________________________________________ >> >> >> Devel mailing list >> >> >> Devel@ovirt.org >> >> >> http://lists.ovirt.org/mailman/listinfo/devel >> >> >> >> >> >> >> >> >> >> >> >> _______________________________________________ Devel mailing list Devel@ovirt.org http://lists.ovirt.org/mailman/listinfo/devel