Markus,

I have a very similar implementation is an app where a new user is added by 
selecting a contact.

In my UsagerList component where I have the new user function I have this in my 
html file:

<wo:AjaxModalDialog label = "$localizer.UsagerList.button.ajouterUsager" width 
= "800" title = "$localizer.UsagerList.button.ajouterUsager" class = "tiny 
button" style = "margin-bottom:0;">
        <wo:ContactSelector selectedContact = "$selectedContact" selectAction = 
"$addUsager"/>
</wo:AjaxModalDialog>
....
<wo:AjaxModalDialogOpener class="tiny button" title = "Édition d'un usager" 
action = "$editItem" dialogId = "usagerEditor" 
>Éditer</wo:AjaxModalDialogOpener>

The add button open the modal that display my ContactSelector component with 2 
bindings. The selectedContact will contain the selected contact (an object of 
my Contact entity) and the selectAction will be performed upon selection.

In my UsagerList java class, I have a   public WOActionResults addUsager() 
method that create or edit a user for this contact in a modal dialog. In your 
case, just put the value in the desired attribute of your edited object and 
close the displayed modal dialog by calling AjaxModalDialog.close(context()); 
For your situation, I would add the to the closeUpdateContainerID = "editor" 
AjaxModalDialog bindings to refresh the form and show the selection to the user.


public WOActionResults addUsager() {
        EOEditingContext ec = ERXEC.newEditingContext();
        Usager usager = Usager.fetchUsager(ec, 
Usager.CONTACT.eq(selectedContact().localInstanceIn(ec)));
        if (usager != null) {
                setEditedItem(usager);
                AjaxModalDialog.open(context(), "usagerEditor", 
localizer().localizedStringForKeyWithDefault("UsagerList.text.editerUsager"));
        }
        else {
                Usager newUsager = Usager.createUsager(ec);
                
newUsager.setContact(newUsager.localInstanceOf(selectedContact()));
                newUsager.setUserName(selectedContact().email());
                setEditedItem(newUsager);
                AjaxModalDialog.open(context(), "usagerEditor");
        }
        return null;
}

The ContactSelector component needs to be non synchronizing, either by 
extending ERXNonSynchronizingComponent or by overriding the 
synchronizesVariablesWithBindings method.

Here is the selectContact method in ContactSelector:
public WOActionResults selectContact() {
        EOEditingContext ec = (EOEditingContext) 
valueForBinding(EditingContextBindingName);
        if (ec == null) {
                setValueForBinding(item(), SelectedContactBindingName);
        }
        else {
                setValueForBinding(item().localInstanceIn(ec), 
SelectedContactBindingName);
        }
        return (WOActionResults) valueForBinding(SelectActionBindingName);
}

Samuel



> Le 12 déc. 2017 à 05:59, Markus Ruggiero <mailingli...@kataputt.com> a écrit :
> 
> Hi Samuel,
> 
> thanks for your help, but there are some things still not clear.
> 
> I have that WOTextField I want to populate. Next to the text field I need a 
> clickable element (link, button, whatever) that the user user can use to call 
> up an overlay modal dialog. This dialog gets a list of addresss from the 
> database. The user can then click one of the addresses (a link or a button) 
> to pick the one he needs. This selection action should close the dialog and 
> put the selected address string into the text field.
> 
> I already have a component that retrieves the possible addresses and lists 
> them in tabular form. It also shows a [pick this] link. 
> 
> That's as far as I got. Currently the dialog opener displays the "Select 
> Address" link (should eventually replace the Address Index button. What do I 
> do in that yellow component when the user clicks one of the select buttons? 
> And how can I pass values to the ShippingAddressSelection component? It ought 
> to know the object being edited on the main form, but it is called up by the 
> componentName binding on the dialog, no way to bind anything.
> 
> I must miss something very simple. The Ajax Examples are not of help here (or 
> I just don't get it), as they show some things but actually do not give an 
> answer to a "how do I do this..." type of question.
> 
> Thanks for bearing with me.
> ---markus---
> 
> addressSelectionDialogOpener : AjaxModalDialogOpener {
>       dialogId = "selectAddressDialog";
>       linkTitle = "Select Address";
>       label = "Select Address";
> }
> 
> selectAddressDialog : AjaxModalDialog {
>       pageName = "ShippingAddressSelection";
>       id = "selectAddressDialog";
>       title = "Select Shipping Address";
>       centerVertically = true;
>       locked = true;
>       width = 630;
>       height = 320;
>       overlayOpacity = "0.5";
>       overlayDuration = "0.1";
>       slideDownDuration = "0.1";
>       slideUpDuration = "0.1";
>       closeUpdateContainerID = "shippingAddressUpdateContainer";
> }
> 
> 
> <addresspanel.jpeg>
>> On 11 Dec 2017, at 21:59, Samuel Pelletier <sam...@samkar.com 
>> <mailto:sam...@samkar.com>> wrote:
>> 
>> Hi Markus,
>> 
>> If I understand your requirement correctly, you want a modal that allows 
>> selecting some value(s) for a form field and want the selection be visible 
>> in the displayed form after the modal close.
>> 
>> The trick is to define an AjaxUpdateContainer around the zone to be updated 
>> after the modal close. If you use AjaxObserveFields on your form, you can 
>> have a large section refreshed safely.
>> 
>> You also need to define the AjaxModalDialog with it's id and add the 
>> closeUpdateContainerID binding to specify the AjaxUpdateContainer to update 
>> when the dialog close.
>> 
>> <wo:AjaxModalDialog closeUpdateContainerID = "formContainerId" id = 
>> "selectValueDialogId" ...
>> 
>> And lastly, put the link to open the dialog on your form...
>> <wo:AjaxModalDialogOpener dialogId = "selectValueDialogId" class = "tiny 
>> button" label = "$localizer.button.selectionner"/>
>> 
>> 
>> Samuel
>> 
>> 
>> 
>>> Le 11 déc. 2017 à 11:41, Markus Ruggiero <mailingli...@kataputt.com 
>>> <mailto:mailingli...@kataputt.com>> a écrit :
>>> 
>>> it always the same ... not using these things often results in utter 
>>> confusion when finally I need to do this.
>>> 
>>> I have a standard page with a large form.
>>> On that page there is a text field that the user can ...
>>>     - enter an value directly
>>>     - depending on previously made selections further up in the form the 
>>> value is already set and cannot be changed
>>>     - depending on previously made selections further up in the form there 
>>> is a button/link next to the text field that should open a modal dialog 
>>> with a list of strings to pick from (the field is not editable direcly).
>>> My problem is that 3rd option.
>>> 
>>> I already have a small component that loads the available strings from the 
>>> database and shows them in a table. The user can then click a [pick this] - 
>>> hyperlink next to an entry (or close the selection box without picking 
>>> anything. The picked 
>>> value should be put into the text field.
>>> 
>>> I succeeded partially with the help of the Ajax Examples. Tried 
>>> AjaxModalDialog as well as AjaxModalUpdate. I can show a dialog with both 
>>> elements and the correct data, but from there? ..... I am lost.
>>> 
>>> Which one to use, AjaxModalDialog or AjaxModalUpdate?
>>> How do I get the selected String back / put it into the underlying 
>>> object-to-be-edited, update the display and close the dialog.
>>> 
>>> Can anyone provide me with a simple example? 
>>> 
>>> Thanks a lot
>>> ---markus---
>>> 
>>> 
>>> _______________________________________________
>>> Do not post admin requests to the list. They will be ignored.
>>> Webobjects-dev mailing list      (Webobjects-dev@lists.apple.com 
>>> <mailto:Webobjects-dev@lists.apple.com>)
>>> Help/Unsubscribe/Update your Subscription:
>>> https://lists.apple.com/mailman/options/webobjects-dev/samuel%40samkar.com 
>>> <https://lists.apple.com/mailman/options/webobjects-dev/samuel%40samkar.com>
>>> 
>>> This email sent to sam...@samkar.com <mailto:sam...@samkar.com>

 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      (Webobjects-dev@lists.apple.com)
Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to