Errors resolving html:text property attribute
I've tracked down the internal PD error message to the use of a bean within a bean within a bean. For some reason, html:text is no longer able to handle the following statement: html:text name=regForm property=user.user.userName / It is able to handle: html:text name=regForm property=user.userName / When using the first line of code the following exception is thrown: java.lang.Error: PropertyDescriptor: internal error while merging PDs: type mismatch between read and write methods at java.beans.PropertyDescriptor.init(PropertyDescriptor.java:343) at java.beans.Introspector.processPropertyDescriptors(Introspector.java:649) at java.beans.Introspector.getTargetPropertyInfo(Introspector.java:572) at java.beans.Introspector.getBeanInfo(Introspector.java:372) at java.beans.Introspector.getBeanInfo(Introspector.java:144) at org.apache.commons.beanutils.PropertyUtils.getPropertyDescriptors(PropertyUt ils.java:949) at org.apache.commons.beanutils.PropertyUtils.getPropertyDescriptors(PropertyUt ils.java:979) at org.apache.commons.beanutils.PropertyUtils.getPropertyDescriptor(PropertyUti ls.java:887) at org.apache.commons.beanutils.PropertyUtils.getSimpleProperty(PropertyUtils.j ava:1172) at org.apache.commons.beanutils.PropertyUtils.getNestedProperty(PropertyUtils.j ava:772) at org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.java:80 1) at org.apache.struts.util.RequestUtils.lookup(RequestUtils.java:952) at org.apache.struts.taglib.html.BaseFieldTag.doStartTag(BaseFieldTag.java:176) at _sharedcontent._registration._register__jsp._jspService(/sharedcontent/regis tration/templates/register.jsp:17) at com.caucho.jsp.JavaPage.service(JavaPage.java:75) at com.caucho.jsp.Page.pageservice(Page.java:555) at com.caucho.server.dispatch.PageFilterChain.doFilter(PageFilterChain.java:155 ) at com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:1 77) at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java: 221) at com.caucho.server.hmux.HmuxRequest.handleRequest(HmuxRequest.java:392) at com.caucho.server.port.TcpConnection.run(TcpConnection.java:315) at com.caucho.util.ThreadPool.runTasks(ThreadPool.java:353) at com.caucho.util.ThreadPool.run(ThreadPool.java:302) at java.lang.Thread.run(Thread.java:534) Has anybody encountered this problem before? I have verified that the accessor methods are returning and accepting the same Object. Does anyone have a suggestion on how to fix this? This code has been running fine for almost 2 years now. Thanks, Brian McClung Senior Programmer Belo Interactive 214-977-4083
Internal error while merging PD's
I recently started getting this exception on code that had been working before. I have checked that the get method and set method return and accept the same type (in this case a String). I saw the earlier post indicating that the accessor methods had been mismatched, but in this case I have checked and double checked to make sure that they each match. Any help would be appreciated. java.lang.Error: PropertyDescriptor: internal error while merging PDs: type mismatch between read and write methods at java.beans.PropertyDescriptor.init(PropertyDescriptor.java:343) at java.beans.Introspector.processPropertyDescriptors(Introspector.java:649) at java.beans.Introspector.getTargetPropertyInfo(Introspector.java:572) at java.beans.Introspector.getBeanInfo(Introspector.java:372) at java.beans.Introspector.getBeanInfo(Introspector.java:144) at org.apache.commons.beanutils.PropertyUtils.getPropertyDescriptors(PropertyUt ils.java:949) at org.apache.commons.beanutils.PropertyUtils.getPropertyDescriptors(PropertyUt ils.java:979) at org.apache.commons.beanutils.PropertyUtils.getPropertyDescriptor(PropertyUti ls.java:887) at org.apache.commons.beanutils.PropertyUtils.getSimpleProperty(PropertyUtils.j ava:1172) at org.apache.commons.beanutils.PropertyUtils.getNestedProperty(PropertyUtils.j ava:772) at org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.java:80 1) at org.apache.struts.util.RequestUtils.lookup(RequestUtils.java:952) at org.apache.struts.taglib.html.BaseFieldTag.doStartTag(BaseFieldTag.java:176) at _sharedcontent._registration._test__jsp._jspService(/sharedcontent/registrat ion/test.jsp:11) at com.caucho.jsp.JavaPage.service(JavaPage.java:75) at com.caucho.jsp.Page.pageservice(Page.java:555) at com.caucho.server.dispatch.PageFilterChain.doFilter(PageFilterChain.java:155 ) at com.caucho.server.webapp.DispatchFilterChain.doFilter(DispatchFilterChain.ja va:129) at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java: 221) at com.caucho.server.webapp.RequestDispatcherImpl.forward(RequestDispatcherImpl .java:272) at com.caucho.server.webapp.RequestDispatcherImpl.forward(RequestDispatcherImpl .java:111) at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:10 69) at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProces sor.java:455) at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:279) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482) at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507) at javax.servlet.http.HttpServlet.service(HttpServlet.java:126) at javax.servlet.http.HttpServlet.service(HttpServlet.java:103) at com.caucho.server.dispatch.ServletFilterChain.doFilter(ServletFilterChain.ja va:113) at com.caucho.server.webapp.DispatchFilterChain.doFilter(DispatchFilterChain.ja va:129) at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java: 221) at com.caucho.server.webapp.RequestDispatcherImpl.forward(RequestDispatcherImpl .java:272) at com.caucho.server.webapp.RequestDispatcherImpl.forward(RequestDispatcherImpl .java:111) at com.caucho.jsp.PageContextImpl.forward(PageContextImpl.java:811) at _sharedcontent._registration._index2__jsp._jspService(_index2__jsp.java:30) at com.caucho.jsp.JavaPage.service(JavaPage.java:75) at com.caucho.jsp.Page.pageservice(Page.java:555) at com.caucho.server.dispatch.PageFilterChain.doFilter(PageFilterChain.java:155 ) at com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:1 77) at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java: 221) at com.caucho.server.hmux.HmuxRequest.handleRequest(HmuxRequest.java:392) at com.caucho.server.port.TcpConnection.run(TcpConnection.java:315) at com.caucho.util.ThreadPool.runTasks(ThreadPool.java:353) at com.caucho.util.ThreadPool.run(ThreadPool.java:302) at java.lang.Thread.run(Thread.java:534) Thanks, Brian McClung Senior Programmer Belo Interactive 214-977-4083
RE: referrer url
Careful doing this. If an end user is running a personal firewall or has very high security settings, the referrer may not be set. In this case your application will need a back up plan in order to build the appropriate URL. Brian McClung -Original Message- From: MOHAN RADHAKRISHNAN [mailto:[EMAIL PROTECTED] Sent: Tuesday, March 23, 2004 5:53 AM To: 'Struts Users Mailing List' Subject: referrer url Hi I am trying to get the referrer URL using JSTL or JSP. Is there a way ? I have a link in an email that hits an action. So in order to identify the action was hit from the email link I appended a parameter to the URL. Now I want to do something if the action was hit from the email link. Any thoughts. Mohan - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
RE: ActionClass
No, you can use (String) request.getHeader(referer); To get the refering URL, but personal firewalls and even browser settings allow it to be turned off, so you will always need to have a backup mechanism for loading from the referer in the case where it's null. Brian -Original Message- From: Ramadoss Chinnakuzhandai [mailto:[EMAIL PROTECTED] Sent: Monday, February 23, 2004 4:55 PM To: Struts Users Mailing List Subject: RE: ActionClass are you saying about getRequestURL()? can you shed some light on it?? -R -Original Message- From: McClung, Brian [mailto:[EMAIL PROTECTED] Sent: Monday, February 23, 2004 5:08 PM To: 'Struts Users Mailing List' Subject: RE: ActionClass You can always try to pull the referer from the request. But that can be unreliable. Brian -Original Message- From: Ramadoss Chinnakuzhandai [mailto:[EMAIL PROTECTED] Sent: Monday, February 23, 2004 4:07 PM To: Struts Users Mailing List Subject: RE: ActionClass tnx for your informationjust curious that is it possible to identify the request url and executure block wrt that url and return the result back to that url **without using DynaAction and DispatchAction but I still wanted use simple Action class. -R -Original Message- From: McClung, Brian [mailto:[EMAIL PROTECTED] Sent: Monday, February 23, 2004 4:50 PM To: 'Struts Users Mailing List' Subject: RE: ActionClass I have created a Dynamic Action class (DynaAction) that allows a page to define where resulting action states should go. You can define defaults within the actual action or struts-config.xml and then override at the page level. The one drawback that I have seen is that since you are defining your action states at the page level using hidden tags, it gives more visibility into the application that what you otherwise might want to have. To use the code below, extend from DynaAction and inside your class call addState(String stateName, String URL) for each state that your action could result in. When you are ready to return the ActionMapping, call loadState(String stateName, ActionMapping, HttpServletRequest). If you need to perform a redirect you can set redirect to true. The code for DynaAction is below. /*** The DynaAction package com.belo.struts.action; import com.belo.campaign.mail.BeloMail; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.util.MessageResources; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import java.util.Hashtable; /** * * Extends Action to support dynamic forwarding, basic email mechanism, * and hashtable creation. * * @author Brian McClung * @version $Revision: 1.8 $Date: 2004/01/21 23:23:38 $ **/ public class DynaAction extends Action { /** * the hashtable for class level mappings **/ protected Hashtable stateHash; /** * Any path that should be prepended to the URL in the stateHash **/ protected String forward = ; /** * Tells the new Forward action to handle URL's as a page redirect instead * of a return; **/ protected boolean redirect = false; /** * Allows a fw= queryString parameter to either pass through to the next page * or be used to redirect the current page. **/ protected boolean useFW = false; /** * Default constructor **/ public DynaAction() { stateHash = new Hashtable(); } /** * * Refactor of builcStateHash so action classes won't have to implement them. * **/ public void addState(String stateID, String URL) { stateHash.put(stateID, URL); } /** * Sets the redirect flag for forwarding. **/ public void setRedirect(boolean redirect) { this.redirect = redirect; } /** * Sets the path to be prepended to a URL before forwarding to a page **/ public void setForward(String forward) { if(forward == null) { return; } this.forward = forward; } /** * Returns the boolean value of useFW. * * @return current boolean value of useFW **/ public boolean getUseFW() { return useFW; } /** * Sets the boolean value of useFW * * @param useFW - boolean value to set useFW to. **/ public void setUseFW(boolean useFW
RE: ActionClass
I have created a Dynamic Action class (DynaAction) that allows a page to define where resulting action states should go. You can define defaults within the actual action or struts-config.xml and then override at the page level. The one drawback that I have seen is that since you are defining your action states at the page level using hidden tags, it gives more visibility into the application that what you otherwise might want to have. To use the code below, extend from DynaAction and inside your class call addState(String stateName, String URL) for each state that your action could result in. When you are ready to return the ActionMapping, call loadState(String stateName, ActionMapping, HttpServletRequest). If you need to perform a redirect you can set redirect to true. The code for DynaAction is below. /*** The DynaAction package com.belo.struts.action; import com.belo.campaign.mail.BeloMail; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.util.MessageResources; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import java.util.Hashtable; /** * * Extends Action to support dynamic forwarding, basic email mechanism, * and hashtable creation. * * @author Brian McClung * @version $Revision: 1.8 $Date: 2004/01/21 23:23:38 $ **/ public class DynaAction extends Action { /** * the hashtable for class level mappings **/ protected Hashtable stateHash; /** * Any path that should be prepended to the URL in the stateHash **/ protected String forward = ; /** * Tells the new Forward action to handle URL's as a page redirect instead * of a return; **/ protected boolean redirect = false; /** * Allows a fw= queryString parameter to either pass through to the next page * or be used to redirect the current page. **/ protected boolean useFW = false; /** * Default constructor **/ public DynaAction() { stateHash = new Hashtable(); } /** * * Refactor of builcStateHash so action classes won't have to implement them. * **/ public void addState(String stateID, String URL) { stateHash.put(stateID, URL); } /** * Sets the redirect flag for forwarding. **/ public void setRedirect(boolean redirect) { this.redirect = redirect; } /** * Sets the path to be prepended to a URL before forwarding to a page **/ public void setForward(String forward) { if(forward == null) { return; } this.forward = forward; } /** * Returns the boolean value of useFW. * * @return current boolean value of useFW **/ public boolean getUseFW() { return useFW; } /** * Sets the boolean value of useFW * * @param useFW - boolean value to set useFW to. **/ public void setUseFW(boolean useFW) { this.useFW = useFW; } /** * * Pulls the appropriate URL to forward to based on the state received. * * @param state - the state this object is currently in. Used to look up the appropriate * path for this object * @param mappings - the ActionMapping associated with this object. * @param request - the HttpServletRequest associated with this object * * @return ActionForward - a new ActionForward with the appropriate forward information **/ public ActionForward loadMapping(String state, ActionMapping mapping, HttpServletRequest request) { ActionForward aForward = null; //Failure -- register.jsp //loginFailure -- signin.jsp //success -- thankyou.jsp //Pull forwards from struts-config.xml String fw = checkForward(request); if(this.getUseFW()) { if( ( fw != null ) ( !fw.equals() ) ) { return new ActionForward(state, fw, true); } } String stateURL = (String)
RE: ActionClass
You can always try to pull the referer from the request. But that can be unreliable. Brian -Original Message- From: Ramadoss Chinnakuzhandai [mailto:[EMAIL PROTECTED] Sent: Monday, February 23, 2004 4:07 PM To: Struts Users Mailing List Subject: RE: ActionClass tnx for your informationjust curious that is it possible to identify the request url and executure block wrt that url and return the result back to that url **without using DynaAction and DispatchAction but I still wanted use simple Action class. -R -Original Message- From: McClung, Brian [mailto:[EMAIL PROTECTED] Sent: Monday, February 23, 2004 4:50 PM To: 'Struts Users Mailing List' Subject: RE: ActionClass I have created a Dynamic Action class (DynaAction) that allows a page to define where resulting action states should go. You can define defaults within the actual action or struts-config.xml and then override at the page level. The one drawback that I have seen is that since you are defining your action states at the page level using hidden tags, it gives more visibility into the application that what you otherwise might want to have. To use the code below, extend from DynaAction and inside your class call addState(String stateName, String URL) for each state that your action could result in. When you are ready to return the ActionMapping, call loadState(String stateName, ActionMapping, HttpServletRequest). If you need to perform a redirect you can set redirect to true. The code for DynaAction is below. /*** The DynaAction package com.belo.struts.action; import com.belo.campaign.mail.BeloMail; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.util.MessageResources; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import java.util.Hashtable; /** * * Extends Action to support dynamic forwarding, basic email mechanism, * and hashtable creation. * * @author Brian McClung * @version $Revision: 1.8 $Date: 2004/01/21 23:23:38 $ **/ public class DynaAction extends Action { /** * the hashtable for class level mappings **/ protected Hashtable stateHash; /** * Any path that should be prepended to the URL in the stateHash **/ protected String forward = ; /** * Tells the new Forward action to handle URL's as a page redirect instead * of a return; **/ protected boolean redirect = false; /** * Allows a fw= queryString parameter to either pass through to the next page * or be used to redirect the current page. **/ protected boolean useFW = false; /** * Default constructor **/ public DynaAction() { stateHash = new Hashtable(); } /** * * Refactor of builcStateHash so action classes won't have to implement them. * **/ public void addState(String stateID, String URL) { stateHash.put(stateID, URL); } /** * Sets the redirect flag for forwarding. **/ public void setRedirect(boolean redirect) { this.redirect = redirect; } /** * Sets the path to be prepended to a URL before forwarding to a page **/ public void setForward(String forward) { if(forward == null) { return; } this.forward = forward; } /** * Returns the boolean value of useFW. * * @return current boolean value of useFW **/ public boolean getUseFW() { return useFW; } /** * Sets the boolean value of useFW * * @param useFW - boolean value to set useFW to. **/ public void setUseFW(boolean useFW) { this.useFW = useFW; } /** * * Pulls the appropriate URL to forward to based on the state received. * * @param state - the state this object is currently in. Used to look up the appropriate * path for this object * @param mappings - the ActionMapping associated with this object. * @param request - the HttpServletRequest associated with this object * * @return ActionForward - a new ActionForward with the appropriate forward information **/ public ActionForward loadMapping(String state
RE: Advantages of Struts?
The property file usage works well if you have an application that is deployed once and doesn't change that often. Also if there aren't several apps running off the same domain. In my case it doesn't work well because there is so much information that changes, potentially from day to day, that the property file rapidly becomes unmaintainable. Plus, with the property file solution I need to be involved in the creative designers process. Brian McClung Senior Programmer Belo Interactive 214-977-4083 -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Sent: Friday, December 05, 2003 8:16 AM To: [EMAIL PROTECTED] Cc: [EMAIL PROTECTED] Subject: RE: Advantages of Struts? You can easily move your application specific configuration to other configuration files (i.e. ApplicationResources or tiles-defs.xml). You don't have to use the mapping.findForward() at all in your Actions, instead, read these values from ApplicationResource files. Robert H. Tran wrote: My point was not against configuration altogether, but rather against the current rigid and centralized configuration. There should be options. If there is configurations in a component, it should be self-contained by the component. It is no framework's business. If there is an api in Struts, this can be done nice and easy, as I said with Eclipse. - Robert. - Original Message - From: Martin Cooper [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Thursday, December 04, 2003 11:51 AM Subject: Re: Disadvantages of Struts? Robert H. Tran [EMAIL PROTECTED] wrote in message news:[EMAIL PROTECTED] I think an action's mapping is a decision by the action itself. Like I said earlier, when an application development finishes, that decision will become static. At that point, when an Action's mapping changes, its code will have to change too (unless the new mapping is kind of a synonym to the old mapping, which doesn't bear any shift in the semantics). As such, there is almost no point in keeping the decision and the code separate (i.e. making the decision's configuration a loose end of the code). Or at least, configuration shouldn't be the only way to add or modify an Action. I disagree with this almost completely. If actions are written properly, you should be able to reconfigure the application, to some extent at least, by changing the config alone and not touching the Java code. This is immensely useful when an app needs to be customised after the fact, and when the source code is not available (e.g. by a customer, in their own environment). -- Martin Cooper Even though each Action's configuration may be small, the configurations for all the Actions need to be kept track of and maintained (for integrity). That may be a significant but unnecessary side work. To view the mappings, there can be a tool to traverse the structure by api calls and display it. That can be done after the fact and doesn't have to be before it. In addition to that, when the decision (or configuration if any) goes where the code lives, modularity increases. IMHO, - Robert. - Original Message - From: [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Thursday, December 04, 2003 6:55 AM Subject: RE: Disadvantages of Struts? I have to disagree with you on the first point. I find that there is just a small amount of necessary configuration required to build an Action class (most of my Action configurations have about a half dozen lines, even less if there is no associated ActionForm). I'm not really sure what you mean by paddle back and forth between the code and the configuration, could you explain? Thanks. Robert H. Tran wrote: I am not sure that is true. Struts seems to lack of an API. IMO, there are more required configurations than necessary. Take Action for example, to write an Action, one has to paddle back and forth between the code and the configuration. It is like an executable having to configure each of its dlls. The visibility of the mappings is nice to have but the mappings can be generated after the fact as in a debugging view. When the application is finished, configurations become static. But since configurations are required, they will be like loose ends of the application. Another issue: how can one componentize his code and deploy it in a self-contained plug-in, as with Eclipse? Please forgive my novice. - Robert. - Original Message - From: Rick Hightower [EMAIL PROTECTED] To: 'Struts Developers List' [EMAIL PROTECTED] Sent: Wednesday, December 03, 2003 6:24 PM Subject: RE: Disadvantages of Struts? Don't be silly. Struts is perfect. -Original Message- From: Robert H. Tran [mailto:[EMAIL PROTECTED] Sent: Wednesday, December 03, 2003 2:10 PM To: Struts Developers List Subject: Disadvantages of Struts? I just wonder if Struts comes with any significant drawback. I mean not in terms of when to use Struts and when not to use
RE: Disadvantages of Struts?
Robert, I've gone to the opposite extreme as you. I don't want the action to be responsible for where it goes, only for telling users which forward states it supports. I've removed the forward from both the Action and the struts-config.xml file. The action still returns the forward, but the forward is dynamically created based on what the page has passed to the action. In my situation I resorted to this because I was using a single action to handle multiple applications on the same site. This meant that my path would not be the same between each application. Resorting to multiple mappings in the configuration file would rapidly get out of control for me as some of these applications can be created and removed rather quickly. I do have separate pages per application and this is why the page drives the actions result. I know this bends the MVC pattern, but it allows me to concentrate on developing actions, form beans, and all the back end business logic, while letting the Creative Designers develop pages and GUI workflow. Is anyone else doing something similar? I posted my DynaAction class that I use to do this with a couple of weeks ago. It really surprises me that there hasn't been a greater need for something like this in the community. I'd be curious to hear how others have solved this problem. Brian McClung Senior Programmer Belo Interactive 214-977-4083 -Original Message- From: Vic Cekvenich [mailto:[EMAIL PROTECTED] Sent: Thursday, December 04, 2003 2:18 PM To: [EMAIL PROTECTED] Subject: Re: Disadvantages of Struts? I disagree with you as well Robert. Having a confgiration nudges you toward design and separation, and everyone on the team know where to find things. In fact, when not doing Web apps, I use HiveMind, just so that I can have the structure. Anyway, there a lot of MVC compeitoris. .V Robert H. Tran wrote: My point was not against configuration altogether, but rather against the current rigid and centralized configuration. There should be options. If there is configurations in a component, it should be self-contained by the component. It is no framework's business. If there is an api in Struts, this can be done nice and easy, as I said with Eclipse. - Robert. - Original Message - From: Martin Cooper [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Thursday, December 04, 2003 11:51 AM Subject: Re: Disadvantages of Struts? Robert H. Tran [EMAIL PROTECTED] wrote in message news:[EMAIL PROTECTED] I think an action's mapping is a decision by the action itself. Like I said earlier, when an application development finishes, that decision will become static. At that point, when an Action's mapping changes, its code will have to change too (unless the new mapping is kind of a synonym to the old mapping, which doesn't bear any shift in the semantics). As such, there is almost no point in keeping the decision and the code separate (i.e. making the decision's configuration a loose end of the code). Or at least, configuration shouldn't be the only way to add or modify an Action. I disagree with this almost completely. If actions are written properly, you should be able to reconfigure the application, to some extent at least, by changing the config alone and not touching the Java code. This is immensely useful when an app needs to be customised after the fact, and when the source code is not available (e.g. by a customer, in their own environment). -- Martin Cooper Even though each Action's configuration may be small, the configurations for all the Actions need to be kept track of and maintained (for integrity). That may be a significant but unnecessary side work. To view the mappings, there can be a tool to traverse the structure by api calls and display it. That can be done after the fact and doesn't have to be before it. In addition to that, when the decision (or configuration if any) goes where the code lives, modularity increases. IMHO, - Robert. - Original Message - From: [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Thursday, December 04, 2003 6:55 AM Subject: RE: Disadvantages of Struts? I have to disagree with you on the first point. I find that there is just a small amount of necessary configuration required to build an Action class (most of my Action configurations have about a half dozen lines, even less if there is no associated ActionForm). I'm not really sure what you mean by paddle back and forth between the code and the configuration, could you explain? Thanks. Robert H. Tran wrote: I am not sure that is true. Struts seems to lack of an API. IMO, there are more required configurations than necessary. Take Action for example, to write an Action, one has to paddle back and forth between the code and the configuration. It is like an executable having to configure each of its dlls. The visibility of the mappings is nice to have but the mappings can be
RE: Advantages of Struts?
Just wanted to clarify, Its a value for the action that is modified, not the forward name. The Forward Names are set by the Action, the values (resulting URL) are set by the pages. Brian McClung Senior Programmer Belo Interactive 214-977-4083 -Original Message- From: Vic Cekvenich [mailto:[EMAIL PROTECTED] Sent: Thursday, December 04, 2003 5:20 PM To: [EMAIL PROTECTED] Subject: Re: Advantages of Struts? FAQ #2: I would say this about Struts: Sturts is like a kindergarden, we put our boots here, our books here; thus they allow people to know where to find things on a project. Presnetation here, Data Layer here; And also people know generaly what they should be doing: Once you have a form (html) mock up, you know what the formbean should be (it mapps). Just get the form bean to CRUD via DAO. Also a few consider dynambeans a bad practice. http://sixlegs.com/blog/java/death-to-dynabeans.html I consier them a not as good as form beans, they are harder to unit test among other things. .V McClung, Brian wrote: Robert, I've gone to the opposite extreme as you. I don't want the action to be responsible for where it goes, only for telling users which forward states it supports. I've removed the forward from both the Action and the struts-config.xml file. The action still returns the forward, but the forward is dynamically created based on what the page has passed to the action. In my situation I resorted to this because I was using a single action to handle multiple applications on the same site. This meant that my path would not be the same between each application. Resorting to multiple mappings in the configuration file would rapidly get out of control for me as some of these applications can be created and removed rather quickly. I do have separate pages per application and this is why the page drives the actions result. I know this bends the MVC pattern, but it allows me to concentrate on developing actions, form beans, and all the back end business logic, while letting the Creative Designers develop pages and GUI workflow. Is anyone else doing something similar? I posted my DynaAction class that I use to do this with a couple of weeks ago. It really surprises me that there hasn't been a greater need for something like this in the community. I'd be curious to hear how others have solved this problem. Brian McClung Senior Programmer Belo Interactive 214-977-4083 -Original Message- From: Vic Cekvenich [mailto:[EMAIL PROTECTED] Sent: Thursday, December 04, 2003 2:18 PM To: [EMAIL PROTECTED] Subject: Re: Disadvantages of Struts? I disagree with you as well Robert. Having a confgiration nudges you toward design and separation, and everyone on the team know where to find things. In fact, when not doing Web apps, I use HiveMind, just so that I can have the structure. Anyway, there a lot of MVC compeitoris. .V Robert H. Tran wrote: My point was not against configuration altogether, but rather against the current rigid and centralized configuration. There should be options. If there is configurations in a component, it should be self-contained by the component. It is no framework's business. If there is an api in Struts, this can be done nice and easy, as I said with Eclipse. - Robert. - Original Message - From: Martin Cooper [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Thursday, December 04, 2003 11:51 AM Subject: Re: Disadvantages of Struts? Robert H. Tran [EMAIL PROTECTED] wrote in message news:[EMAIL PROTECTED] I think an action's mapping is a decision by the action itself. Like I said earlier, when an application development finishes, that decision will become static. At that point, when an Action's mapping changes, its code will have to change too (unless the new mapping is kind of a synonym to the old mapping, which doesn't bear any shift in the semantics). As such, there is almost no point in keeping the decision and the code separate (i.e. making the decision's configuration a loose end of the code). Or at least, configuration shouldn't be the only way to add or modify an Action. I disagree with this almost completely. If actions are written properly, you should be able to reconfigure the application, to some extent at least, by changing the config alone and not touching the Java code. This is immensely useful when an app needs to be customised after the fact, and when the source code is not available (e.g. by a customer, in their own environment). -- Martin Cooper Even though each Action's configuration may be small, the configurations for all the Actions need to be kept track of and maintained (for integrity). That may be a significant but unnecessary side work. To view the mappings, there can be a tool to traverse the structure by api calls and display it. That can be done after the fact and doesn't have to be before it. In addition
A Dynamic Action handler Opinons wanted.
I've been using struts for over two years now and enjoy the benefits that it has brought to my code. An issue that I have always had with it is the struts-config.xml file. We have a custom built registration and survey system that struts is the controller for. The backend engine supports most of our surveys and contests as well as other backend processes. For contests we have a process where a new contest requires a creative designer to create a signin, registration and thank you page for their contest and then they include the standard signin and registration templates on their pages. The thank you page is simply a final page that everything can resolve to. When I originally started using struts the configuration file had to be set up with 2 action-mappings pointing to each contest. With 24 sites running contests the file rapidly became unmaintainable. The DynaAction was created to solve this problem. Through a hashtable created by each action object the DynaAction is able to redirect a single action to many different pages. I still use the state definitions as a communication method, but I typically don't even define the states in the struts-config.xml document any more. The process is fairly simply, if there is a field in the request that matches the state, then the value of that field is used to redirect on that state. If it is missing, the action looks to the config file, and if that is missing then there is typically a default page coded into the action itself. I'm curious to know what the group thinks about this extension and how it fits in/breaks the struts architecture. I'm surprised that something like this doesn't already exist, I've found it to be a great addition to the API. Any feedback or opinions about using a class like this in struts would be appreciated. package com.belo.struts.action; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.util.MessageResources; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import java.util.Hashtable; /** * @class DynaAction * * Extends Action to support dynamic forwarding, basic email mechanism, * and hashtable creation. * * @author Brian McClung * @version $Revision: 1.5 $Date: 2003/11/19 23:24:26 $ **/ public class DynaAction extends Action { /** * the hashtable for class level mappings **/ protected Hashtable stateHash; /** * Any path that should be prepended to the URL in the stateHash **/ protected String forward = ; /** * Tells the new Forward action to handle URL's as a page redirect instead * of a return; **/ protected boolean redirect = false; /** * Allows a fw= queryString parameter to either pass through to the next page * or be used to redirect the current page. **/ protected boolean useFW = false; /** * Default constructor **/ public DynaAction() { stateHash = new Hashtable(); } /** * * Adds a state to the hashtable * * @param stateID - the key to reference this state by * @param URL - the value to associate with this state **/ public void addState(String stateID, String URL) { stateHash.put(stateID, URL); } /** * Sets the redirect flag for forwarding. **/ public void setRedirect(boolean redirect) { this.redirect = redirect; } /** * Sets the path to be prepended to a URL before forwarding to a page **/ public void setForward(String forward) { if(forward == null) { return; } this.forward = forward; } /** * Returns the boolean value of useFW. * * @return current boolean value of useFW **/ public boolean getUseFW() { return useFW; } /** * Sets the boolean value of useFW * * @param useFW - boolean value to set useFW to. **/ public void setUseFW(boolean useFW) { this.useFW = useFW; } /** * * Pulls the appropriate URL to forward to based on the state received. * * @param state - the state this object is currently in. Used to look up the appropriate * path for this object * @param mappings - the ActionMapping associated with this object. * @param request -
Known issues with JDK1.4.1_01 and struts 1.1b2
I've scanned the previous messages and I know that most of the responses have been there are no issues, but I'm having a problem with a nested optionscollection pulling information. Are there any known issues between the two that anyone has encountered? Thanks for your help. Brian McClung Senior Programmer Belo Interactive 214-977-4083 -- To unsubscribe, e-mail: mailto:[EMAIL PROTECTED] For additional commands, e-mail: mailto:[EMAIL PROTECTED]
RE: Known issues with JDK1.4.1_01 and struts 1.1b2
The nested:optionsCollection tag is my problem. This is working code on JDK1.3 and struts 1.0. The directory has been simply copied to the new test server and this seems to be the only problem that I am having at this point. No messages in the error logs to indicate a problem, and I am sure that the object has stuff in it as I am printing the contents out to stdout before redirecting to the page. Brian McClung Senior Programmer Belo Interactive 214-977-4083 -Original Message- From: David Graham [mailto:[EMAIL PROTECTED]] Sent: Wednesday, November 27, 2002 2:34 PM To: [EMAIL PROTECTED] Subject: Re: Known issues with JDK1.4.1_01 and struts 1.1b2 I'm running 1.4.1 and 1.1b2 just fine. You should post a question related to your actual problem for help :-). David From: McClung, Brian [EMAIL PROTECTED] Reply-To: Struts Users Mailing List [EMAIL PROTECTED] To: '[EMAIL PROTECTED]' [EMAIL PROTECTED] Subject: Known issues with JDK1.4.1_01 and struts 1.1b2 Date: Wed, 27 Nov 2002 14:14:22 -0600 I've scanned the previous messages and I know that most of the responses have been there are no issues, but I'm having a problem with a nested optionscollection pulling information. Are there any known issues between the two that anyone has encountered? Thanks for your help. Brian McClung Senior Programmer Belo Interactive 214-977-4083 -- To unsubscribe, e-mail: mailto:[EMAIL PROTECTED] For additional commands, e-mail: mailto:[EMAIL PROTECTED] _ Protect your PC - get McAfee.com VirusScan Online http://clinic.mcafee.com/clinic/ibuy/campaign.asp?cid=3963 -- To unsubscribe, e-mail: mailto:[EMAIL PROTECTED] For additional commands, e-mail: mailto:[EMAIL PROTECTED] -- To unsubscribe, e-mail: mailto:[EMAIL PROTECTED] For additional commands, e-mail: mailto:[EMAIL PROTECTED]
RE: Known issues with JDK1.4.1_01 and struts 1.1b2
Yes, I've got several Vectors sitting on the form. It seems that all other tags are working except when I start trying to use the nested classes. In the past, not passing anything in the Vector would result in a null pointer exception, but right now all I get is that the collection doesn't even exist (keep in mind that this is the exact same code working on the original systems). That's what really has me thinking it has something to do with JDK1.4.1_01. I pulled struts1.1b2 down because a previous thread mentioned there were some fixes that might impact my problem, but that hasn't fixed yet. Brian -Original Message- From: Edgar Dollin [mailto:[EMAIL PROTECTED]] Sent: Wednesday, November 27, 2002 4:37 PM To: 'Struts Users Mailing List' Subject: RE: Known issues with JDK1.4.1_01 and struts 1.1b2 My apologies in advance. You have a collection in the subform? -Original Message- From: McClung, Brian [mailto:[EMAIL PROTECTED]] Sent: Wednesday, November 27, 2002 3:14 PM To: '[EMAIL PROTECTED]' Subject: Known issues with JDK1.4.1_01 and struts 1.1b2 I've scanned the previous messages and I know that most of the responses have been there are no issues, but I'm having a problem with a nested optionscollection pulling information. Are there any known issues between the two that anyone has encountered? Thanks for your help. Brian McClung Senior Programmer Belo Interactive 214-977-4083 -- To unsubscribe, e-mail: mailto:[EMAIL PROTECTED] For additional commands, e-mail: mailto:[EMAIL PROTECTED] -- To unsubscribe, e-mail: mailto:[EMAIL PROTECTED] For additional commands, e-mail: mailto:[EMAIL PROTECTED] -- To unsubscribe, e-mail: mailto:[EMAIL PROTECTED] For additional commands, e-mail: mailto:[EMAIL PROTECTED]
using logic tags and ApplicationResources values
I have a need to validate whether a Resource has a value associated with it. I was hoping to use the logic:messagesPresent tag but it I can't seem to get it to read from the bean:message tags. How do I nest the bean:message tag into another tag set so that the returned value of the tag is treated as a string? Thanks, Brian McClung Belo Interactive 214-977-4083 -- To unsubscribe, e-mail: mailto:[EMAIL PROTECTED] For additional commands, e-mail: mailto:[EMAIL PROTECTED]
RE: Leading slash '/' in URLs
I tried removing all of the / in both my actions and in the jsp pages. Now I get an error for each jsp page stating that it can't find /login. I have verified that there is no reference to /login in my page or struts-config file. Where in my web.xml file would I look to make sure I have specified the root path? Thanks, Brian McClung -Original Message- From: Ashoka Murthy [mailto:[EMAIL PROTECTED]] Sent: Monday, November 12, 2001 10:51 AM To: [EMAIL PROTECTED] Subject: Re: Leading slash '/' in URLs When you use a /login.do -- the Servlet appends the absolute path of web-apps Root directory to the page so the page will be referred from there. When you use a login.do -- The servlet will refer it to from the path where your referring page exists. This might not work if the web.xml tells that ActionServlet should service only requests matching a url-pattern. Ashoka Murthy From: John Yu [EMAIL PROTECTED] Reply-To: Struts Users Mailing List [EMAIL PROTECTED] To: [EMAIL PROTECTED] Subject: Leading slash '/' in URLs Date: Mon, 05 Nov 2001 10:38:40 +0800 I'm wondering whether the leading slash '/' is optional in the URLs in the tags like html:link page=/login.do... html:form action=/subscription... and in the action path action path=/subscription .../ It seems to me it works without the leading slashes. Could someone confirm me whether they're required? -- John Yu Scioworks Technologies e: [EMAIL PROTECTED] w: +(65) 873 5989 w: http://www.scioworks.com m: +(65) 9782 9610 Scioworks Camino - Rapid WebApp Assembly for Struts -- To unsubscribe, e-mail: mailto:[EMAIL PROTECTED] For additional commands, e-mail: mailto:[EMAIL PROTECTED] _ Get your FREE download of MSN Explorer at http://explorer.msn.com/intl.asp -- To unsubscribe, e-mail: mailto:[EMAIL PROTECTED] For additional commands, e-mail: mailto:[EMAIL PROTECTED] -- To unsubscribe, e-mail: mailto:[EMAIL PROTECTED] For additional commands, e-mail: mailto:[EMAIL PROTECTED]
RE: How to customize the way Validation Error is display
Where do I get hold of the messages tag? I've looked in my struts-html.tld file but it isn't there? Which version is it located in? Thanks Brian McClung -Original Message- From: David Winterfeldt [mailto:[EMAIL PROTECTED]] Sent: Thursday, October 04, 2001 1:01 PM To: [EMAIL PROTECTED] Subject: Re: How to customize the way Validation Error is display I'm not sure if this is what you were asking about, but you can use html:messages instead of html:errors to give a little more control over displaying errors. The html:messages tag iterates over the errors so you can insert markup around an individual message. You can also use the property attribute to retrieve a message for an individual property (html:errors and html:messages) so you could display an error message next to each field. ul html:messages id=message property=firstName libean:write name=message//li /html:messages /ul David --- Adam Grohs [EMAIL PROTECTED] wrote: Have a look at an implimentation description and sample that I've put together at www.leanonme.org. Hope this helps. Thanks, Adam S. Grohs [EMAIL PROTECTED] - Original Message - From: Minh Tran [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, October 03, 2001 3:40 PM Subject: How to customize the way Validation Error is display Does anyone know how to control and customize the way the validation error is display when when fills out incorrect form information? Thanks, Minh __ Do You Yahoo!? NEW from Yahoo! GeoCities - quick and easy web site hosting, just $8.95/month. http://geocities.yahoo.com/ps/info1
RE: How to customize the way Validation Error is display
It turned out that I was using an old version of struts that did not include the Messages tag in the struts-html.tld. I was able to pull the latest release down and that helped to get the messages piece working. Thanks for the help! Brian McClung -Original Message- From: Minh Tran [mailto:[EMAIL PROTECTED]] Sent: Friday, October 05, 2001 12:47 PM To: '[EMAIL PROTECTED]' Subject: RE: How to customize the way Validation Error is display Well.. I think what I was looking for and what might help Brian is: This queues two error messages, one for the username field and another for the password field. To print all the messages together, simply place the error tag anywhere in your JSP. body bgcolor=white html:errors/ Or, you can place specific error messages at different locations td align=left html:text property=username size=16 maxlength=16/ html:errors property=username/ /td /trtr td align=left html:text property=password size=16 maxlength=16/ html:errors property=password/ /td -Original Message- From: Christophe Marchand [SMTP:[EMAIL PROTECTED]] Sent: Friday, October 05, 2001 10:03 AM To: [EMAIL PROTECTED] Subject: Re: How to customize the way Validation Error is display I think you can use a factory for this. Have a look in ActionServlet.initApplication() for more detail... And do not forget to have a good WE ;-)) - Original Message - From: McClung, Brian [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Friday, October 05, 2001 5:52 PM Subject: RE: How to customize the way Validation Error is display Where do I get hold of the messages tag? I've looked in my struts-html.tld file but it isn't there? Which version is it located in? Thanks Brian McClung -Original Message- From: David Winterfeldt [mailto:[EMAIL PROTECTED]] Sent: Thursday, October 04, 2001 1:01 PM To: [EMAIL PROTECTED] Subject: Re: How to customize the way Validation Error is display I'm not sure if this is what you were asking about, but you can use html:messages instead of html:errors to give a little more control over displaying errors. The html:messages tag iterates over the errors so you can insert markup around an individual message. You can also use the property attribute to retrieve a message for an individual property (html:errors and html:messages) so you could display an error message next to each field. ul html:messages id=message property=firstName libean:write name=message//li /html:messages /ul David --- Adam Grohs [EMAIL PROTECTED] wrote: Have a look at an implimentation description and sample that I've put together at www.leanonme.org. Hope this helps. Thanks, Adam S. Grohs [EMAIL PROTECTED] - Original Message - From: Minh Tran [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, October 03, 2001 3:40 PM Subject: How to customize the way Validation Error is display Does anyone know how to control and customize the way the validation error is display when when fills out incorrect form information? Thanks, Minh __ Do You Yahoo!? NEW from Yahoo! GeoCities - quick and easy web site hosting, just $8.95/month. http://geocities.yahoo.com/ps/info1
Single form made from multiple form objects
I have a form that combines elements from mulitple form elements, some of which are represented as vectors within the main form. When I try to access some of the getters that are nested within the main form struts is not building the get reference correctly. Has anyone tried to do this? Does anyone have a suggestion of how to accomplish it? See the example below for a more detailed description: ActionForm Registration includes: ActionForm User Vector of ActionForm Question Vector of ActionForm Answer Registration.jsp is passed Registration form, but needs to pull the answer for a particular Answer, ie ((AnswerForm) vector[index]).elementName the elemenName should be referenced by the appropriate get and set syntax, but so far I have been unable to figure out the appropriate mechanism for getting it parsed correctly. Thanks for any help! Brian McClung Belo Interactive 214-977-4083
Compiliation issues
I am running the latest version of Resin. I am able to precompile a page using the /resin/bin/httpd.sh -e command but the page will not autocompile. Has anyone encountered this problem before? I am getting the following Servlet Exception: java.lang.NoSuchMethodError at com.caucho.jsp.Taglib.fillTag(Taglib.java:406) at com.caucho.jsp.Taglib.fillTagLibraryInfo(Taglib.java:336) at com.caucho.jsp.Taglib.init(Taglib.java:164) at com.caucho.jsp.JspParser.parseTaglibDirective(JspParser.java:975) at com.caucho.jsp.JspParser.parseDirective(JspParser.java:685) at com.caucho.jsp.JspParser.parseScriptlet(JspParser.java:554) at com.caucho.jsp.JspParser.parseNode(JspParser.java:309) at com.caucho.jsp.JspParser.parseJsp(JspParser.java:289) at com.caucho.jsp.JspParser.parse(JspParser.java:187) at com.caucho.jsp.JspParser.parse(JspParser.java:135) at com.caucho.jsp.JspManager.createPage(JspManager.java:122) at com.caucho.jsp.PageManager.getPage(PageManager.java:332) at com.caucho.jsp.PageManager.getPage(PageManager.java:195) at com.caucho.jsp.QServlet.getPage(QServlet.java:215) at com.caucho.server.http.FilterChainPage.doFilter(FilterChainPage.java:126) at com.caucho.server.http.Invocation.service(Invocation.java:272) at com.caucho.server.http.CacheInvocation.service(CacheInvocation.java:128) at com.caucho.server.http.RunnerRequest.handleRequest(RunnerRequest.java:334) at com.caucho.server.http.RunnerRequest.handleConnection(RunnerRequest.java:266 ) at com.caucho.server.TcpConnection.run(TcpConnection.java:140) at java.lang.Thread.run(Thread.java:484) Thanks for any help Brian McClung Belo Interactive 214-977-4083
Servlet Exception
I am trying to verify an installation with the struts-blank app. I am getting a 500 Servlet Exception at the taglib descriptor: The message is: /struts-blank/index.jsp:2: org.apache.struts.taglib.bean.CookieTei I'm using Resin2.0.1. I've seen this before but I don't know how I got it to go away. Any help would be appreciated. Thanks, Brian McClung Belo Interactive 214-977-4083
RE: Running The Struts Example Application
I'm seeing the same error message running under Resin2.0.1. The odd thing is that the app works just fine on my development box (W2K running resin2.0.1) but when I move it over to the test environment (Redhat 7 running resin2.0.1) it doesn't work. I've tried recompiling and that doesn't seem to do anything either. Any ideas? Brian McClung -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]] Sent: Wednesday, August 29, 2001 11:17 AM To: [EMAIL PROTECTED] Subject: Re: Running The Struts Example Application Try under Tomcat 3.2.3. Otherwise, if you really want to get it to run under Tomcat 4, research some of the older messages in this archive (you need to replace the xml parsing jar files which come with Tomcat 4. Mark Bennett markb@ualbert To: Struts User [EMAIL PROTECTED] a.cacc: Subject: Running The Struts Example Application 08/29/2001 10:02 AM Please respond to struts-user Hi, I am running Tomcat 4.0 and am trying to run the Struts 1.0 sample application, struts-example.war. I have moved this file into the Tomcat webapp directory, however when I try to access it I get the following error: A Servlet Exception Has Occurred Exception Report: javax.servlet.ServletException: Cannot find message resources under key org.apache.struts.action.MESSAGE at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImp l.java:452) at org.apache.jsp._0002findex_jsp._jspService (_0002findex_jsp.java:453) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:107) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at org.apache.jasper.servlet.JspServlet$JspServletWrapper.service(JspServlet.ja va:201) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:381) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:458) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application FilterChain.java:247) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh ain.java:193) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.ja va:243) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:5 66) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.ja va:215) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:5 66) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2314) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164 ) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:5 66) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:462) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:5 64) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java :163) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:5 66) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java: 1000) at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1093 ) at java.lang.Thread.run(Thread.java:484) Root Cause: javax.servlet.jsp.JspException: Cannot find message resources under key org.apache.struts.action.MESSAGE at org.apache.struts.util.RequestUtils.message(RequestUtils.java:568) at org.apache.struts.taglib.bean.MessageTag.doStartTag(MessageTag.java:239) at org.apache.jsp._0002findex_jsp._jspService (_0002findex_jsp.java:93) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:107) at