Hi, I want to add check which user is working now. To do this I am planning to check the users name first and add this name into the HttpSession so that I can access it from anywhere. But since pageContext in JspTag is private, I can not access the session. Can anybody tell me another way to implement this ?
Many thanks…
X-Application Version: 3.1.2 Tamino Version : 3.1.1 Platform : Win2k, WebContainer : Tomcat 3.3 JDK Version : 1.3.1
1) if you place it on the Jsp page itself (using <% … %> ), you have access to Jsp’s pageContext variable and you can use pageContext.getSession()
2) if you place it in your own Jsp tag (which is not derived from X-Application’s JspTag class), you will implement the setPageContext method (or derive it from SupportBodyTag)
3) if you place it in your own Jsp tag (which is derived from X-Application’s JspTag), you have to overwrite JspTag.setPageContext() in your tag. Basically, your method “YourTag.setPageContext()” should store the pageContext in a field of your class and call the overridden method: yourPageContextField = pageContext; super.setPageContext(pageContext); Now, you can use “yourPagecontextField” to access the pageContext. IMPORTANT: this solution is kind of a hack! JspTag has a private pageContext field on purpose: we want to run Unit tests on tags derived from JspTag - but the pageContext is not available in unit tests (since instances of PageContext are created by Tomcat) By isolating all access to the pageContext in the JspTag class, we can fake the information taken from pageContext and run unit-test our tage without running Tomcat. Overwriting setPageContext would violate this policy …
Hello, I prefer using the 3rd method in which I use a Tag derived from JspTag because I also need to access the Xapplication data. But I didn’t understand what you mean by “Unit Tests”. Will overriding the setPageContext method cause any problems in my application? Is it possible that you might make this method private in further versions? (which will make my Tag useless since I can not access the PageContext) Thanks
Unit testing means “testing in isolation”: we want to test our tags without running Tomcat. Unit testing is a kind of buzz word and JUnit is the most widespread tool for Java: http://junit.org/index.htm
Overriding setPageContext doesn’t break anything as long as you don’t want to run Unit test for your tag.
The setPageContext method will never be private (since the Tag interface requires a public method).
normally X-Application does not modify the standard Session Object provided by Tomcat. X-Application uses this object to add its ServletSessionContext object. But it does not remove other objects stored within this session object.
To analyze your problem it would be helpful to have the jsp pages where you invoke the Bean and where you use the X-Application tags.
Please, describe also the order how the pages are invoked.