Like chuck said, you need to use AjaxHyperLink, AjaxUpdateLink or
AjaxSubmitButton for Ajax stuff.
Link the actions to your code, launchAlertDialog seems already OK.
If you want to replace the current page with a component inside an Ajax action,
you need to return an ERXRedirect with the desired new page specified like this:
ERXRedirect redirect = pageWithName(ERXRedirect.class);
redirect.setComponent(newPageToDisplay);
return redirect;
Often, you only want to update an AjaxUpdateContainer (or more than one) with:
AjaxUpdateContainer.updateContainerWithID(containerID, context());
AjaxUpdateContainer.updateContainerWithID(container2ID, context());
Samuel
Le 2014-02-21 à 12:29, Roger Perryman <[email protected]> a écrit :
> Thanks Chuck. I'm using the first option but it is not quite working as
> desired although it is close. open() is a static method so I placed the call
> inside a method on my page. Then I conditionally call open or do nothing as
> needed.
>
> When I call it from a WOHyperlink or WOSubmitButton, I get the Javascript as
> plain text replacing the page contents. This is not a surprise so I changed
> to the Ajax equivalents. (that may have been part of the original problem)
> These launch the dialog properly. The action handlers for the dialog use
> AjaxModalDialog.close( context()) to dismiss the dialog.
>
> The AlertPopup basically presents a message where you answer yes or no. The
> calling page should handle the flow once the dialog is dismissed. How do I
> accomplish this? The next page may require additional data that the AlertPop
> up shouldn't have to deal with. onClose discards the return results. I also
> tried onCloseBeforeUpdate but that didn't seem to get called. Is there a
> similar hook? I didn't see one in the source.
>
> I am showing the relevant code here.
>
> Main Page:
>
> alertDialog: AjaxModalDialog
> {
> id = "alertDialogID";
> autoFocusing = false;
> centerVertically = true;
> locked = true;
> transitions = false;
> label = "Warning! Unsaved changes"; // Text of link
> title = "Warning! Unsaved changes"; // Text of Dialog
> closeValue = "x";
> showOpener = true; // false may be OK since no direct link
> width = 600;
> height = 500;
> action = alertHandler;
> onOpen = onOpen;
> onClose = onClose;
> onCloseBeforeUpdate=onCloseBeforeUpdate;
> }
>
> public WOActionResults launchAlertDialog()
> {
> boolean isPageDirty = determineIfDirty();
> if ( isPageDirty )
> AjaxModalDialog.open( context(), "alertDialogID" );
>
> return null;
> }
>
> public WOActionResults onOpen()
> {
> log.debug( "onOpen called" );
> return null; // ignored
> }
>
> public WOActionResults onClose()
> {
> log.debug( "onClose called" );
> return null; // ignored
> }
>
> public Boolean onCloseBeforeUpdate()
> {
> log.debug( "onCloseBeforeUpdate called" );
> return true;
> }
>
> public WOActionResults alertHandler()
> {
> AlertPopup nextPage = pageWithName( AlertPopup.class );
> nextPage.setAlertParent( this );
> return nextPage;
> }
>
> public WOActionResults cancel()
> {
> WOComponent nextPage = null;
> boolean isPageValid = false;
>
> if ( !isPageValid )
> launchAlertDialog();
>
> else { * * * }
>
> return nextPage;
> }
>
> /* NOTE: MUST use AjaxSubmitButton or AjaxHyperlink. WOSubmitButton or
> WOHyperlink wont work */
> cancel: AjaxSubmitButton
> {
> value = "Cancel";
> action = cancel;
> }
>
> AlertPopup page:
>
> /* I used a Form but had similar results with AjaxHyperlink */
> alertForm: ERXWOForm
> {
> id = "alertForm";
> multipleSubmit = true;
> embedded = true;
> }
>
> no: AjaxSubmitButton
> {
> action = noAction;
> value = "No";
> }
>
> yes: AjaxSubmitButton
> {
> action = yesAction;
> value = "Yes";
> }
>
> public WOActionResults yesAction()
> {
> _alertParent.takeValueForKey( Boolean.TRUE, "alertResult" );
> AjaxModalDialog.close( context() );
> return null;
> }
>
> public WOActionResults noAction()
> {
> _alertParent.takeValueForKey( Boolean.FALSE, "alertResult" );
> AjaxModalDialog.close( context() );
> return null;
> }
>
>
> On Feb 19, 2014, at 6:32 PM, Chuck Hill wrote:
>
>> One of these from Java:
>>
>> /**
>> * Call this method to have a JavaScript response returned that opens the
>> modal dialog.
>> * The title of the dialog will be what it was when rendered.
>> *
>> * @param context the current WOContext
>> * @param id the HTML ID of the AjaxModalDialog to open
>> */
>> public static void open(WOContext context, String id) {
>> AjaxUtils.javascriptResponse(openDialogFunctionName(id) + "();", context);
>> }
>>
>> /**
>> * Call this method to have a JavaScript response returned that opens the
>> modal dialog.
>> * The title of the dialog will be the passed title. This is useful if the
>> script to
>> * open this dialog was rendered without the title or with an incorrect title.
>> *
>> * @param context the current WOContext
>> * @param id the HTML ID of the AjaxModalDialog to open
>> * @param title the title for the AjaxModalDialog
>> */
>> public static void open(WOContext context, String id, String title) {
>> AjaxUtils.javascriptResponse(openDialogFunctionName(id) + "(" +
>> AjaxValue.javaScriptEscaped(title) + ");", context);
>> }
>>
>>
>> Chuck
>>
>>
>> On 2/19/2014, 3:19 PM, "Roger Perryman" wrote:
>>
>> Hi.
>>
>> What is the correct way to open an AjaxModalDialog programmatically after
>> evaluating some criteria? I know that I can call it via Javascript using
>> openAMD_<ID>(). But that isn't exactly what I'm looking for. Since I need to
>> evaluate what they have done first, I guess I would need to update the page
>> in order to trigger the action to open the dialog? It also closes the
>> current window and processes the action binding. I want to be able to
>> present a warning message when the user presses a button/hyperlink (such as
>> cancel) and there are changes pending. They can then choose to return to the
>> page or continue and discard any changes. I have other similar situations
>> where the user should be alerted to the consequences of their actions and
>> given a chance to correct, ignore or take another action.
>>
>> Any help would be appreciated!
>>
>> Thanks,
>>
>> Roger
>>
>>
>>
>> _______________________________________________
>> Do not post admin requests to the list. They will be ignored.
>> Webobjects-dev mailing list ([email protected])
>> Help/Unsubscribe/Update your Subscription:
>> https://lists.apple.com/mailman/options/webobjects-dev/chill%40global-village.net
>>
>> This email sent to [email protected]
>
> _______________________________________________
> Do not post admin requests to the list. They will be ignored.
> Webobjects-dev mailing list ([email protected])
> Help/Unsubscribe/Update your Subscription:
> https://lists.apple.com/mailman/options/webobjects-dev/samuel%40samkar.com
>
> This email sent to [email protected]
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list ([email protected])
Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com
This email sent to [email protected]