That's what I understood from the documentation in the website, but the fact is 
that I get an error (the browser shows an exception) if I don't register a 
managed bean with the same name of the view.

And the error has nothing to do with a component backing bean. The same 
application that works fine without Shale, start to show this error message 
after adding the Shale configurations in the web.xml.

Could you please confirm if the following filter is requited by Shale (I'm 
using this in my web.xml):

<!-- Shale Application Controller Filter -->
 <filter>
  <filter-name>shale</filter-name>
  <filter-class>org.apache.shale.faces.ShaleApplicationFilter</filter-class>
 </filter>
 
 <!-- Shale Application Controller Filter Mapping -->
 <filter-mapping>
     <filter-name>shale</filter-name>
     <url-pattern>/*</url-pattern>
     <dispatcher>REQUEST</dispatcher>
     <dispatcher>FORWARD</dispatcher>
 </filter-mapping>

If not, maybe this is the cause of the strange behavior.

Regarding the portlet issue, you mean that Shale adds a requirement to the 
portlet container? So it means that I might not be able to deploy my portlet 
application in some portal vendor because I use Shale?

- Marcio

-----Original Message-----
From: Gary VanMatre [mailto:[EMAIL PROTECTED] 
Sent: sexta-feira, 24 de março de 2006 12:22
To: Struts Users Mailing List
Subject: Re: Is Shale supposed to work in a portlet environment?

>From: "Marcio E Miranda" <[EMAIL PROTECTED]> 
>
> Hi, 
> 
> 
> 
> First of all, there is one point in Shale that I didn't understand very 
> well. Why the developer has to register a managed bean for each view? 


The shale ViewController adds additional lifecycle events to the vanilla JSF 
lifecycle.  This is accomplished without hooking into a specific implementation 
of JSF.  The solution is loosely coupled and it's not a requirement that you 
associated every page with a ViewController.   The mechanism for the extra 
callback events are on the ViewController.  The view controller is a managed 
bean that is associated with a page by it's view id.  


> When I try to access a page without registering a bean with the same 
> name of the view in faces-config.xml, I get an error from Shale stating 
> that the expression #{myviewname} could not be evaluated. If I then 
> register a bean with the same name of the view in faces-config.xml, it 
> works. There is no such a requirement in a JSF application that doesn't 
> use Shale. 
> 

The error that you are seen has to do with binding a component to a backing 
bean using a expression language (EL) binding.  You would see this error 
regardless of having Shale in the picture.

If you don't have a ViewController associated with a page, you will see a 
*warning* message in the log.

WARNING: No ViewController for viewId /usecases.jsp found under name usecases

Besides the ViewController, the Shale subview component adds a "prerender" 
callback event on the view controller.

I really like the new tiger annotations that allow you to register managed 
beans without XML.  This makes it easy to register view controllers.  
You are also able to make a view controller out of any managed bean and give 
your own method signatures to the callback events.  

For example: 

/**
 * <p>Sample <code>ViewController</code> 
 * class for <code>/examples/dataList.html</code>.</p>
 */
@Bean(name="dataTable", scope=Scope.SESSION)
@View public class DataTableBean  {
    
  
 @Prerender public void loadPeople() {
  people = new ArrayList();
  for (int i = 0; i < 10; i++) {
   BasicPerson person = new BasicPerson();
   person.setFirstName("First" + i);
   person.setLastName("Last" + (10 - i));
   people.add(person);
  }
 }
 
 private List people = null;
 public List getPeople() {
    return people;
 }
 
}

> 
> 
> Now to the portlet issue. I have a portlet application, which uses 
> Shale, that runs fine in a web container (note that I had to define a 
> managed bean with the same name of the view for it to work). Then, I've 
> deployed the same application in a portlet container (Liferay). When I 
> try to access the portlet, I get an error stating that the expression 
> #{index} could not be evaluated. I checked the stack trace and realized 
> that the exception was raised by the Shale controller (seems to me that 
> this is the same issue described above). What is the workaround? Is 
> Shale supposed to work in a portlet environment (I'm using the portlet 
> implementation provided by My Faces)? 
> 

Shale requires the portlet container to implement filters.  


> 
> 
> - Marcio. 
> 
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to