You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by "Kolesnikov, Alexander GNI" <Al...@CIGNA.com> on 2007/03/22 13:31:41 UTC

[T4] PageRedirectException

I am using contrib:Table to display the results of a search. If a search
returns zero results, I want to treat this as an error and to show the
search form again with this error in the same way as if it was a faulty
user input validation.

It seems to me that a good solution to throw a PageRedirectException at
the moment when the Table component receives a source with 0 records in
it. I have tried to do this in the method that provides the model for
the page, like so:

public IBasicTableModel getModel() {
	// some code to prepare the model
		
	if (model.getRowCount() == 0) {
		throw new PageRedirectException("Search");
	}		
	return model;
}

But in this case the PageRedirectException was not caught by Tapestry
but propagated.

Another attempt was to override the renderComponent() method of the
Table component, like so:

protected void renderComponent(IMarkupWriter writer, IRequestCycle
cycle) {
		
	if (getSource().getRowCount() == 0) {
		throw new PageRedirectException("Search");
	}
	super.renderComponent(writer, cycle); 
}

This seems to work when redirecting to a different page. However, I want
to redirect to the same page because the search form and the table of
results are simply two views of the same page, shown or hidden by If
components as needed. And when I am trying to redirect to the same page,
again, PageRedirectException is not caught but propagated, and the
application crashes.

Does anybody know, why  PageRedirectException is sometimes caught but at
other times propagated and what to do about this? Or maybe you can see a
different solution for my problem?

Thanks,

Alex

------------------------------------------------------------------------------
CONFIDENTIALITY NOTICE: If you have received this email in error, please immediately notify the sender by e-mail at the address shown.  This email transmission may contain confidential information.  This information is intended only for the use of the individual(s) or entity to whom it is intended even if addressed incorrectly.  Please delete it from your files if you are not the intended recipient.  Thank you for your compliance.  Copyright 2007 CIGNA
==============================================================================

AW: [T4] PageRedirectException

Posted by Holger Stolzenberg <h....@ewerk.com>.
If you can try something like this to get a fresh instance of the desired page.

@InjectPage("NameOfMyPage")
public abstract MyPage getMyPage();

With the instance acquired by this method you can do something like this (pseudo code):

IPage page = getMyPage();
....
Use the page instance to get the validation delegate of it and register your error against it.
....
getRequestCylce.activate( page );


Mit lieben Grüßen aus dem eWerk

  |  Holger Stolzenberg
  |  Softwareentwickler
  |
  |  Geschäftsführer: 
  |  Frank Richter, Erik Wende, Hendrik Schubert
  |
  |  eWerk IT GmbH
  |  Markt 16
  |  Leipzig 04109
  |  http://www.ewerk.com
  |  HRB 9065, AG Leipzig
  |  Hauptniederlassung Leipzig
  |
  |  fon +49.341.4 26 49-0
  |  fax +49.341.4 26 49-88
  |  mailto:h.stolzenberg@ewerk.com
  |
  |  Support:
  |  fon 0700 CALLME24 (0700 22556324)
  |  fax 0700 CALLME24 (0700 22556324)
  |
  | Auskünfte und Angebote per Mail
  | sind freibleibend und unverbindlich. 

-----Ursprüngliche Nachricht-----
Von: Kolesnikov, Alexander GNI [mailto:Alexander.Kolesnikov@CIGNA.com] 
Gesendet: Donnerstag, 22. März 2007 13:32
An: Tapestry users
Betreff: [T4] PageRedirectException

I am using contrib:Table to display the results of a search. If a search returns zero results, I want to treat this as an error and to show the search form again with this error in the same way as if it was a faulty user input validation.

It seems to me that a good solution to throw a PageRedirectException at the moment when the Table component receives a source with 0 records in it. I have tried to do this in the method that provides the model for the page, like so:

public IBasicTableModel getModel() {
	// some code to prepare the model
		
	if (model.getRowCount() == 0) {
		throw new PageRedirectException("Search");
	}		
	return model;
}

But in this case the PageRedirectException was not caught by Tapestry but propagated.

Another attempt was to override the renderComponent() method of the Table component, like so:

protected void renderComponent(IMarkupWriter writer, IRequestCycle
cycle) {
		
	if (getSource().getRowCount() == 0) {
		throw new PageRedirectException("Search");
	}
	super.renderComponent(writer, cycle);
}

This seems to work when redirecting to a different page. However, I want to redirect to the same page because the search form and the table of results are simply two views of the same page, shown or hidden by If components as needed. And when I am trying to redirect to the same page, again, PageRedirectException is not caught but propagated, and the application crashes.

Does anybody know, why  PageRedirectException is sometimes caught but at other times propagated and what to do about this? Or maybe you can see a different solution for my problem?

Thanks,

Alex

------------------------------------------------------------------------------
CONFIDENTIALITY NOTICE: If you have received this email in error, please immediately notify the sender by e-mail at the address shown.  This email transmission may contain confidential information.  This information is intended only for the use of the individual(s) or entity to whom it is intended even if addressed incorrectly.  Please delete it from your files if you are not the intended recipient.  Thank you for your compliance.  Copyright 2007 CIGNA ==============================================================================

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org