Dominik,

I received the files. I can confirm that I am seeing the strange behaviour you have told us about. And this behaviour persists even when I replace the myfaces jars with a newer version. This seems like it must be one of those things where the answer is so simple, we'll all have to slap our foreheads when we find it!

Time to go home, and no luck so far. I'm putting the WAR file on my laptop. Maybe I'll figure it out this weekend, but most likely you won't get a response until monday if I do.

Regards,

Jeff Bischoff
Kenneth L Kurz & Associates, Inc.

Bieringer, Dominik wrote:
Hi Jeff,

I've sent you two zip files containing the example pages for:
  --> Sun RI
  --> MyFaces

The pages (about 5) are extremely short (each page has about max. 5-10 lines of 
JSF code)...

It's interesting that they are rendered differently on both implementations, 
but you can see the weird behavior on both implementations...

Thx for the new workaround, I've not yet tested it, but will that do soon.

Thx,
Dominik

-----Original Message-----
From: Jeff Bischoff [mailto:[EMAIL PROTECTED] Sent: Thursday, September 14, 2006 18:39
To: MyFaces Discussion
Subject: Re: Problem with <jsp:include/>

Dominik,

Any chance you could make a simple WAR file to show us, which has this problem? (i.e. a stripped-down version of your application WAR, with all the confidential/irrelevant stuff removed)

We can't test or definitively answer your problem scenario with the limited amount of source code we have seen thus far. For example, the last code you posted had the including container page, but not any of the included content pages. So we couldn't see where you put your subviews.

If redirecting works, perhaps a potential addition to your list of workarounds could include this function from the wiki (hopefully achieving what the redirect is for you):

/**
* Force JSF to build a new view and refresh all fields from model
*/
public static void refresh() {
        FacesContext context = FacesContext.getCurrentInstance();
UIViewRoot viewRoot = context.getApplication().getViewHandler().createView(context, context.getViewRoot().getViewId());
        context.setViewRoot(viewRoot);
//context.renderResponse(); // this line from the wiki, but usually not desired here
}

Regards,

Jeff Bischoff
Kenneth L Kurz & Associates, Inc.

Bieringer, Dominik wrote:
Hi all,

I've just played around with the mysterious <jsp:include/> problem... and I really NEED HELP...

I've tested everything all of you have sent me, but the same problems... I have found out some new things about my problem which I will now summarize... maybe someone of u is able to identify the problem then.

Facts:

======

-> I am using two <jsp:includes/> on one page. (Maybe the solutions mentioned here are working because they are only using one <jsp:include/>)

 -> I have no problems either when I am only using one <jsp:include/>

 -> There are various strange things happening:

   --> The first time the page is rendered normally

--> If the same content page is included, the page is rendered normally again.

   --> If the content page changes, strange errors occur:

     --> Sometimes jsf elements are not in the right order

     --> Sometimes I get an JSF duplicate ID error...

-> If I am using manually assigned ids on all controls on the including page, everything works fine.

What I've found out:

====================

-> The problem definitely has something to do with the id's which are getting assigned to components

 -> One <jsp:include/> is working... more than one à Problems

-> The problems only occur on the including page itself, not on the included pages.

Found solutions:

================

 -> Assigning ids manually on all components on the including page.

      --> I don't want to do that...

      --> What if I am including another page in the included page ???

 -> Only using one <jsp:include/>

      --> That's not possible in my case.

-> Using an navigation case that always forwards from test.jsp to forward.jsp (forward.jsp redirects to test.jsp)

--> With this, the whole component tree is created for every page request...

Mhmmm... Maybe someone of you can help me here! Please... Maybe you can deploy my source (I can send you per mail) and try to fix the problem...

There must be a solution to that problem... Or is this a Bug? It is not working on JSF Reference implementation either...

You can contact my via skype: dominik.bieringer

Thx,

Dominik

-----Original Message-----
From: Jeff Bischoff [mailto:[EMAIL PROTECTED]
Sent: Tuesday, September 12, 2006 16:12
To: MyFaces Discussion
Subject: Re: Problem with <jsp:include/>

 > So, using hard coded id's for every component on my included pages

(And that are a lot.. I have about 50 pages or more) is the only

solution? You are using hard coded ids for every component ??

 >

Gladly, no... this is not the only solution. It's not what we are doing

either! :)

Let me explain a little further...

When you don't specify an id for a component, it gets auto-generated an

id like "_idJsp134". But the container ids are concatenated, so inside

form MyForm, you get an id like MyForm:_idJsp134. The problem comes in

when you include a new page, and e.g. something that maybe was a

inputText before is now a selectOneMenu.

Subviews are the answer to this problem, but only if you use them in a

certain way. If you following CD's pattern, the subview ID gets appended

  but it doesn't help. This is because both pages are being included

from the same line. Using his pattern, you might get the following ids

for the components on the two different pages:

MyForm:subviewID:_idJsp134

MyForm:subviewID:_idJsp134

They are still not unique. If you instead follow the pattern I laid out

in my last post, you will get the following ids:

MyForm:Payments:_idJsp134

MyForm:Balances:_idJsp134

Now these IDs will not conflict. Even though they are not hard-coded,

and get auto-assigned the same _idJsp134 id, the appending of a distinct

subview ID differentiates them. Therefore, you are free to use

components without a hard-coded id.

Hope this clarifies a bit?

Regards,

Jeff Bischoff

Kenneth L Kurz & Associates, Inc.

Bieringer, Dominik wrote:

 Hi,
Wow.... thanks for your answer!!! It's really great! You are totally
right about the things you have said, ...

I've tried assigning all my components in the subviews id=""
attributes before (sorry for forgetting to mention that), and yes, it worked that way... But that's much work and it doesn't look good having an id attribute assigned on every component... but if there's no other way ?!?

Thanks for the great approach to solve the problem with the
initialization of the JSF managed bean... I've solved it with having code like that at the top of the main.jsp page:

 <%
     SessionTracker tracker = BeanResolver.getSessionTracker();
     String tmp = tracker.getContentPage();
 %>
 BeanResolver is using FacesContext to resolve the bean. And then using:
 <jsp:include page='<%= tmp %>'/>
But your approach is much more straight forward... I think I will
replace that part of my code.

I'm having the <f:subview/> tags inside the pages which I am
including... and yes, I was very very carefully with writing the pages (hehe)... I am not even using any html tags in my code...

You are right... I am not including the same jsf page more than once,
so there is no problem with having <f:subview/> tags with the same id...

So, using hard coded id's for every component on my included pages
(And that are a lot.. I have about 50 pages or more) is the only solution? You are using hard coded ids for every component ??

 Dominik
 -----Original Message-----
 From: Jeff Bischoff [mailto:[EMAIL PROTECTED]
 Sent: Monday, September 11, 2006 19:08
 To: MyFaces Discussion
 Subject: Re: Problem with <jsp:include/>
 Dominik,
 Our web application has the same behaviour that you are trying to
 create. We have many different tabs, each of which dynamically includes
 various pages depending on the menu buttons they click. (we even use the
 same method name, setContentPage() heh)
 We've been running such a way for over 6 months now, with no problems
 since the first few days. You have to be very careful about how you
 manage your subviews. These problems you are seeing occur when
 components are using generated ids, and on a subsequent display a new
 component is getting the same id that was assigned to a different
 component before. Hard-coding IDs can help, but this would be a severely
 painful solution in this case.
 CD told you to:
 > subview tags go around the <jsp:include> in your page i.e.
 >
 > <f:subview id="subviewID">
 >     <jsp:include page=" f.jsp"/>
 > </f:subview>
 >
 I'm sorry CD, but for what Dominik is trying to do this is WRONG!! It
 will result in his included page getting the same subview ID every time,
 which is causing his problems. Normally yes, that is the best practice
 way to include a page, but not when the included content will change
 drastically in structure.
 Dominik, you need to follow this pattern for inclusion:
 Including page
 --------------
 <f:attribute name="Content" value="#{navigation.contentPage}" />
 <jsp:include page="${navigation.contentPage}" />
 --------------
 Included (content) pages
 --------------
 <f:subview id="Payments">
 ...content...
 </f:subview>
 Included page #2
 --------------
 <f:subview id="Balances">
 ...other content...
 </f:subview>
 The subview tags need to be in the *included* pages. Each subview needs
 a distinct id, ensuring that the components on the dynamically-included
 pages also get unique ids. My f:attribute tag serves only to ensure that
 navigation managed-bean has been instantiated before the JSTL-el call -
 avoiding a NPE. But you've probably already crossed that bridge.
 In your case, I doubt that you will include the same content-page more
 than once at a time. If you do, you will need to wrap the include with
 an *additional* subview tag, with a different id for each one. The key
 here is preventing duplicate component ids on the content pages.
 Hope this helps.
 Best regards,
 Jeff Bischoff
 Kenneth L Kurz & Associates, Inc.
 Bieringer, Dominik wrote:
Okay... what I have posted here is a simple example...
In my application I am currently developing, there is a String property:
(getContentPage()) on a session bean.
I have several pages, for example:
 -> Downloads
 -> Customers
 -> Home
 -> ... etc.
If a user clicks on Downloads, setContentPage("downloads.jsp") is called
and the next time the page is rendered,
<jsp:include ...../> includes downloads.jsp...
I've not tried using the rendered attribute, because it's not possible
in my case...
But thanks for your idea.
------------------------------------------------------------------------
*From:* CD [mailto:[EMAIL PROTECTED]
*Sent:* Monday, September 11, 2006 15:47
*To:* MyFaces Discussion; [EMAIL PROTECTED]
*Subject:* Re: RE: Problem with <jsp:include/>
Have you tried making use of the "rendered" attribute on the subview tag
to determine which page to include?  I would also recommend
encapsulating the logic used to determine the boolean value in the bean.
On 9/11/06, [EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>*
<[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>> wrote:
I can confirm
- multiple jsp:include's
- session scope bean
- subview does not fix it.
----Ursprüngliche Nachricht----
Von: [EMAIL PROTECTED]
<mailto:[EMAIL PROTECTED]>

Datum: 11.09.2006 12:16
An: "MyFaces Discussion"<[email protected]
<mailto:[email protected]>>
Betreff: RE: Problem with <jsp:include/>
I?ve tried that too, but that does not solve the problem? same results
------------------------------------------------------------------------
*From:* CD [mailto: [EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>]
*Sent:* Monday, September 11, 2006 09:42
*To:* MyFaces Discussion
*Subject:* Re: Problem with <jsp:include/>
subview tags go around the <jsp:include> in your page i.e.
<f:subview id="subviewID">
    <jsp:include page=" f.jsp"/>
</f:subview>
Then f.jsp just needs to contains the content you would like to render.
HTH
On 9/11/06, *Jordan Laughlin* < [EMAIL PROTECTED]
<mailto:[EMAIL PROTECTED]>> wrote:
I can confirm I have experienced this problem as well. Page experienced
VERY weird behavior when using multiple <jsp:include> statements.
You might want to consider using <%@ include %> if you can't find a
solution.
-JL
----- Original Message -----
    *From:* Bieringer, Dominik <mailto:[EMAIL PROTECTED]>
    *To:* [email protected] <mailto:[email protected]>
    *Sent:* Sunday, September 10, 2006 11:37 PM
    *Subject:* Problem with <jsp:include/>
Hi! I have a problem with using <jsp:include> on my JSF pages. I am
    sorry for having created an JIRA issue () before asking here on the
    user mailing list (I've not known about this mailing list). Okay, so
    here is my problem:
I am having many pages, with one master page (in this example
    test.jsp). In my real world application, the master page is
    including other JSF pages. The page to include is determined by a
    String property of a session bean. So, when a user clicks on a link
    in the navigation menu, a property in a session bean is set and the
    next time the page is loaded, this page get's included, rendered,
    and sent to the client. (In my example I am including 2 different
    pages 0.jsp and 1.jsp depending on Math.random() to simulate what I
    want to do in my real world application).
This worked fine for some time, but in the last weeks I've watched
    some strange behavior. Some elements (like <h:outputText/>, ?) have
    been rendered twice, or in the wrong order, ? and sometimes there
    was a duplicate_id exception? So I tried to figure out what is going
    wrong and realized, that there is something about the <jsp:include>.
    If I use JSP include for one page? (for example 1.jsp) ? and in the
    next request I am including the same page, and in the next request
    the same page, and so on? everything works as expected, but when I
    include another page, this strange behaviour occurs?
I am not sure about what the problem is and I've read the JSF
    Reference implementation and I think I've done everything like
    described there. I've attached a very very simple example of what I
    am trying to do. You have to click on the button some times, until
    another page gets rendered, and you can see, that the BEFORE and
    AFTER label are positioned wrong ! (The MMMMMM label has to be
    between them). I've removed the libraries in my example to keep it
    small. I've used Sun RI because it's the same problem that I have
    when using MyFaces (In my real world application I am using MyFaces
    (And I really like it!!!)).
Okay, I hope you can help me, because I am already very frustrated?.
    Thanks for your help in advance, (If you need anything, please let
    me know)
Dominik Because I was not able to attach my file, here are the files and
    there contents:
--- Test.jsp (This is the first page) <%@ page contentType="text/html; charset=Cp1252" %>
    <%@ taglib uri="http://java.sun.com/jsf/html
    <http://java.sun.com/jsf/html>" prefix="h"%>
    <%@ taglib uri="http://java.sun.com/jsf/core
    <http://java.sun.com/jsf/core>" prefix="f"%>
<% long i = Math.round(Math.random()); %> <html>
                <head><title>test_ri</title></head>
<body>
                            <f:view>
                                        <h:panelGrid width="100%"
    columns="1">
<jsp:include page='<%= "" + (i++) + ".jsp" %>'/> <h:outputText value="before"/> <jsp:include page='f.jsp'/> <h:outputText value="after"/> </h:panelGrid>
                            </f:view>
                </body>
    </html>
--- f.jsp <%@ taglib uri="http://java.sun.com/jsf/html
    <http://java.sun.com/jsf/html>" prefix="h"%>
    <%@ taglib uri="http://java.sun.com/jsf/core
    <http://java.sun.com/jsf/core>" prefix="f"%>
<f:subview id="pagef">
                <h:panelGrid columns="1" width="100%">
                            <h:outputText value="MMMMMMMMMMMMMMMM"/>
                </h:panelGrid>
    </f:subview>
--- 1.jsp <%@ taglib uri="http://java.sun.com/jsf/html
    <http://java.sun.com/jsf/html>" prefix="h"%>
    <%@ taglib uri="http://java.sun.com/jsf/core
    <http://java.sun.com/jsf/core>" prefix="f"%>
<f:subview id="page1">
                <h:panelGrid>
                            <h:outputText value="hi 1"/>
                            <h:form>
                                        <h:commandButton value="hi"/>
                            </h:form>
                            <h:outputText value="hi 2"/>
                            <h:outputText value="hi 3"/>
                            <h:outputText value="hi 4"/>
                            <h:outputText value="hi 5"/>
                </h:panelGrid>
    </f:subview>
--- 0.jsp <%@ taglib uri="http://java.sun.com/jsf/html
    <http://java.sun.com/jsf/html>" prefix="h"%>
    <%@ taglib uri="http://java.sun.com/jsf/core
    <http://java.sun.com/jsf/core>" prefix="f"%>
<f:subview id="page0">
                <h:panelGrid>
                            <h:outputText value="ZERS asdfasdf"/>
                            <h:form>
                                        <h:commandButton value="hi"/>
                            </h:form>
                </h:panelGrid>
    </f:subview>










Reply via email to