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.
ÔÚ 8/14/14, 19:48£¬ "Vojtech Szocs" <vszocs(a)redhat.com> ÐŽÈë:
----- Original Message -----
> From: "Leaboy" <wlbleaboy(a)126.com>
> To: "Vojtech Szocs" <vszocs(a)redhat.com>
> Cc: devel(a)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" <vszocs(a)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" <vszocs(a)redhat.com>
> >> To: "ÁŠ²š Íõ" <wlbleaboy(a)126.com>
> >> Cc: devel(a)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().templateBa
>>>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: "ÁŠ²š Íõ" <wlbleaboy(a)126.com>
> >> > To: devel(a)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().cancel(
>>>))
> >>;
> >> > tempVar2.setIsCancel(true);
> >> > model.getCommands().add(tempVar2);
> >> >
> >> > }
> >> > ========================================================
> >> >
> >> > _______________________________________________
> >> > Devel mailing list
> >> > Devel(a)ovirt.org
> >> >
http://lists.ovirt.org/mailman/listinfo/devel
> >> _______________________________________________
> >> Devel mailing list
> >> Devel(a)ovirt.org
> >>
http://lists.ovirt.org/mailman/listinfo/devel
>
>
>
>