Yes, I have done that, thanks.
ÔÚ 8/15/14, 20:13£¬ "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: Friday, August 15, 2014 9:31:34 AM
> Subject: Re: [ovirt-devel] popup dialog
>
> which type does result.getReturnValue() got,
public void executed(FrontendActionAsyncResult result) { ... }
result.getReturnValue() returns VdcReturnValueBase
result.getReturnValue().getActionReturnValue() returns
the result of backend command ("action") execution
For example, your backend command does this:
getReturnValue().setActionReturnValue(obj);
Then "obj" is what you get on frontend with:
result.getReturnValue().getActionReturnValue();
>
> And how could I set it in the backend.
>
> ÔÚ 8/14/14, 21:57£¬ "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 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" <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().templa
>>>>>>>te
> >>>>>>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: "ÁŠ²š Íõ" <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().can
>>>>>>>ce
> >>>>>>l(
> >> >>>>))
> >> >> >>;
> >> >> >> > 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
> >> >>
> >> >>
> >> >>
> >> >>
> >>
> >>
> >>
> >>
>
>
>
>