RE: Iterate certain number of times?
Or a related feature, to know how many times you've iterated? I had need to know when I was on my last iteration so I could not put in an HR. I think it could be done differently, but right now, I'm actually porting an existing site to struts. I broke down and just put some Java code in to have a counter that I could check. I do hope improving the logic tags is on the list somewhere. They are pretty restrictive if you don't want to extend them. Scott -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]] Sent: Friday, April 27, 2001 1:46 PM To: [EMAIL PROTECTED] Subject: RE: Iterate certain number of times? Thanks, but I don't need all that functionality. I have already set up the paging in my actions, but want to generate the links myself simply looping through. Is there not a way to loop through some HTML a set number of times in struts (rather than over a collection)?! Dave Karl Basel [EMAIL PROTECTED] on 04/27/2001 04:21:17 PM Please respond to [EMAIL PROTECTED] To: [EMAIL PROTECTED] cc:(bcc: David Hay/Lex/Lexmark) Subject: RE: Iterate certain number of times? Hi, There's a good pager taglib at jsptags.com. I've used it in a struts app and does the job quite well when embedded in the iterate tags. logic:iterate pg:item Item Details /pg:item /logic:iterate Hope it helps, karl -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]] Sent: 27 April 2001 09:29 To: [EMAIL PROTECTED] Subject: Iterate certain number of times? Hi. Am wanting to iterate a certain number of times, based on a value in my form bean, to create a set of page links for the number of pages the user can view (similar to at the bottom of most search engine results). How do I do this with Struts? Obviously I am not iterating over a collection. But surely it is possible - what am I missing? Many thanks, Dave
RE: html form widgets not appearing
prefix="struts-html", but tag uses are html:* ? -Original Message-From: G.L. Grobe [mailto:[EMAIL PROTECTED]]Sent: Friday, April 27, 2001 3:30 PMTo: [EMAIL PROTECTED]Subject: html form widgets not appearing My pages are showing up fine and the form Actions are working, w/ one exception, all of mypages are not displaying any of the form widgets like radio buttons or text entry boxes and even bean message keys, yet no errors are occurring. Is there anything wrong w/ the below page that would prevent forms from not showing? A problem I had before of not findingmessage keys was thatin the taglib lines where the prefix was only - prefix="bean" - and I actually needed - prefix="struts-bean", though I've seen no examples of it anywhere's, just from somebody's post, so I tried it and it worked. TIA my index.jsp --- %@ page language="java" %%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="struts-bean" %%@ taglib uri="/WEB-INF/struts-html.tld" prefix="struts-html" % html:htmlhead title bean:message key="main.title" //title %@ include file="menubar.js" %%@ include file="main.css" % /head body bgcolor="white"html:errors/ %@ include file="header.jsp" %%@ include file="mainMenu.jsp" % html:form action="view.do" table border="0" cellspacing="2" cellpadding="0" align="left" tr td html:radio property="view" value="Master View" bean:message key="main.master" /nbsp; /html:radio /td td html:radio property="view" value="Details View" bean:message key="main.detail" / /html:radio /td td center html:submit value="View"/ /center /td /tr/table /html:form br br br br br%@ include file="footer.jsp" % /body/html:html
RE: help..bean write not working..html:form action=bean:write name ='formAction' /
The thing this has always been for me was forgetting to have the taglib directive for the bean tags at the top of my JSP. If you forget that, the tag is just ignored, or rather, it is just output. Scott -Original Message- From: Dudley Butt@i-Commerce [mailto:[EMAIL PROTECTED]] Sent: Thursday, April 26, 2001 7:17 AM To: '[EMAIL PROTECTED]' Subject: help..bean write not working..html:form action=bean:write name ='formAction' / hi all, i cant seem to get this bean write tag to work, any ideas? logic:notPresent name=user bean:define id=formAction value=/eFilerAddNoUser scope=request / /logic:notPresent logic:present name=user bean:define id=formAction value=/eFilerAdd scope=request / /logic:present html:html html:errors/ headhtml:base/ link rel=stylesheet href=bean:message key=all.stylesheet/ type=text/css /head body html:form action=bean:write name=\formAction\ /bean:write . .. . thanx
RE: Help me defend Struts taglibs!!!
One thing this argument might come down to is why custom tags, especially for if...else stuff (which, BTW, IMHO is not handled real well by the struts tags...would be nicer to have more flexibility in the conditions you can check and to have the ability to do else, rather than logic:equal.../logic:equallogic:notEqual.../logic:notEqual...but that's another discussion :-). In other words, if it is so easy to just slap some Java in their to do some conditional stuff, why use a clumsy tag. I think that simply comes down to what someone already referred to as a separation of church and state belief, but I think of it more practically. If you currently or would like to eventually have HTML people do your presentation, reserving the Java people to do the programming, then you need to provide the HTML people tools that are consistent with the type of things they are used to and also with the tools they use. It is easier to get Java syntax wrong, for someone who isn't a Java programmer, than it is to get a tag wrong. Now, if you always plan to use Java programmers to do your presentation (bad idea, IMHO), this is not as strong of an argument, but then the other arguments that have been used are better (i18n, etc.). Good luck, Scott -Original Message- From: Firmin David [mailto:[EMAIL PROTECTED]] Sent: Thursday, April 26, 2001 1:47 AM To: '[EMAIL PROTECTED]' Subject: Help me defend Struts taglibs!!! Hi all, Members of my team are gradually turning against using the Struts taglibs and resorting to scriptlets. IMHO: scriptlets bad, tags good. I've had more experience in using them than the others, but I'm finding it difficult to fight my corner in the face of ever increasing skepticism. Could anyone out there with really valid arguments as to why the use of the Struts taglibs (especially the logic tags as they're getting the most grief from my team at the moment) or taglibs in general is good, or why the use of scriptlets is bad help me out (in the interest of fairness, vice versa arguments also happily received!)?? Thanks in advance Regards David ** ** The information in this email is confidential and is intended solely for the addressee(s). Access to this email by anyone else is unauthorised. If you are not an intended recipient, you must not read, use or disseminate the information contained in the email. Any views expressed in this message are those of the individual sender, except where the sender specifically states them to be the views of Capco. http://www.capco.com ** *
RE: How can I use a Image as a submit button using struts
Oops, guess I'm not a nightly build kind of guy...but maybe I should be? I've been trying to treat this more as a product, but I suppose it's not quite there, yet. ;-) Thanks (and sorry for the bug, Craig), Scott -Original Message- From: Dan Miser [mailto:[EMAIL PROTECTED]] Sent: Thursday, April 26, 2001 8:30 AM To: [EMAIL PROTECTED] Subject: RE: How can I use a Image as a submit button using struts Scott, Bug #3 you referred to has been fixed for a while, and is available in the nightly build. Just wanted to save you the headache of adding that bug too! -- Dan Miser http://www.distribucon.com From: Scott Cressler [EMAIL PROTECTED] Reply-To: [EMAIL PROTECTED] To: '[EMAIL PROTECTED]' [EMAIL PROTECTED] Subject: RE: How can I use a Image as a submit button using struts Date: Thu, 26 Apr 2001 08:14:08 -0700 Anyway, I ended up trying the tag (just removing height, width and border): html:image property=done src=/images/btns/save.gif alt=Save/ And the input tag it generated was screwed up (BUG 3)! This is what I got: input type=image name=done src=/images/btns/save.gif alt=Save Notice the missing closing double quote after done. _ Get your FREE download of MSN Explorer at http://explorer.msn.com
RE: please help...is it possible to dynamically set the form action a ttribute dynamically eg html:form action=something that can be built up dynamically
Sorry, no red code for me. ;-) If the action= is the only change between your forms, you could just define a bean with the action name and then use it in the form tag, e.g.: logic:notPresent name=user bean:define id=formAction value=/eFilerAddNoUser / /logic:notPresent logic:present name=user bean:define id=formAction value=/eFilerAdd / /logic:present html:form action=bean:write name='formAction'/ ... I think that will work. Then, of course, if other things in your form need to be different, you'll have other logic tags to control that. Another strategy might be to set a bean (or attribute on your form bean) in the Action class called before this page that contains the name of the action to post to. You could then access it here in a similar manner, rather than having the logic code here. BTW, I'm not clear on some of your logic below. You have several places where, in pseudo-code, you do something like: if (user) then do something if (user) then do something else end if end if Why are you checking again when you're in code that will only be reached if the user is present? ;-) Scott -Original Message- From: Dudley Butt@i-Commerce [mailto:[EMAIL PROTECTED]] Sent: Wednesday, April 25, 2001 3:18 AM To: '[EMAIL PROTECTED]' Subject: please help...is it possible to dynamically set the form action a ttribute dynamically eg html:form action=something that can be built up dynamically currently i'm doing the following: I'm using the logic tag to display one of two forms with the action of each for set differently, based on whether the user bean object is in the session. Is this ok, or is there a better way? Look at the red code %@ page language=java % %@ taglib uri=/WEB-INF/struts-bean.tld prefix=bean % %@ taglib uri=/WEB-INF/struts-html.tld prefix=html % %@ taglib uri=/WEB-INF/struts-logic.tld prefix=logic % html:html html:errors/ headhtml:base/ logic:present name=eFilerForm logic:equal name=eFilerForm property=action scope=request value=Edit titlebean:message key=eFilerEdit.title//title /logic:equal logic:equal name=eFilerForm property=action scope=request value=Add titlebean:message key=eFilerAdd.title//title /logic:equal /head logic:equal name=eFilerForm property=action scope=request value=Add h3bean:message key=eFilerAdd.heading//h3 /logic:equal logic:equal name=eFilerForm property=action scope=request value=Edit h3bean:message key=eFilerEdit.heading//h3 /logic:equal /logic:present body bgcolor=white logic:notPresent name=user html:form action=/eFilerAddNoUser logic:notPresent name=user html:link page=/index.jspbean:message key=eFilerMenu.menu//html:link /logic:notPresent /br/br table border=0 width=70% cols=4 tr th align=right bean:message key=eFiler.firstName/ /th td align=left html:text property=firstName size=16 maxlength=16/ /td th align=right bean:message key=eFiler.initials/ /th td align=left html:text property=initials size=16 maxlength=16/ /td /tr /table /html:form /logic:notPresent logic:present name=user html:form action=/eFilerAdd logic:present name=user html:link page=/eFilerCancel.do?action=Cancelbean:message key=eFilerMenu.menu//html:link /logic:present /br/br table border=0 width=70% cols=4 tr th align=right bean:message key=eFiler.firstName/ /th td align=left html:text property=firstName size=16 maxlength=16/ /td th align=right bean:message key=eFiler.initials/ /th td align=left html:text property=initials size=16 maxlength=16/ /td /tr /table /br /html:form /logic:present /body /html:html
RE: ActionForwards / validation control flow questions
As I understand it, the flow is: 1. User hits submit button to submit against an Action, e.g., /logon in your example 2. This is actually redirected to and handled by ActionServlet 3. ActionServlet instantiates/finds LogonForm instance 4. ActionServlet populates LogonForm from same named parameters from POST 5. ActionServlet calls validate() method of LogonForm (if validate=true in action tag) 6. If ActionErrors returned by validate() is non-null and non-empty, ActionServlet forwards to input= attribute of action definition, which is /logon.jsp for you, and errors are displayed 7. If there are no errors, ActionServlet instantiates/finds LogonAction and calls perform() method of LogonAction 8. LogonAction returns ActionForward 9. ActionServlet forwards to ActionForward returned That said, I'm not sure what your problem is, since I don't recall getting that exact exception. What is jasper? Is that basically a page not found error for apache? Do you have JSPs configured, that is, can you hit JSP pages directly? Otherwise, forwarding to /logon.jsp would not work. I've also had some situations where I needed to have the input attribute be set to something like /logon.do because I needed to do some setup before displaying errors. That was when I was initially trying to convert an app to use struts, so I'm not so sure I needed to do it or that it was a good idea, but you might try that. Good luck, Scott -Original Message- From: Roxie Rochat [mailto:[EMAIL PROTECTED]] Sent: Tuesday, April 24, 2001 5:50 PM To: [EMAIL PROTECTED] Subject: ActionForwards / validation control flow questions I'm getting a javax.servlet.ServletException at org.apache.jasper.runtime.PageContextImpl.handlePageException( PageContextImp l.java:449) when I try to do validation, so I went back to the basic struts example and tried to dissect it. I've ended up being even more confused about how control flow and ActionForwards work and would appreciate some enlightenment about the conclusions I've drawn. When I run the logon.jsp page and click submit without typing anything in, LogonForm.validate() returns errors and LogonAction is never instantiated. Somehow, magically, the logon.jsp page is re-displayed with the errors. If LogonForm.validate() is modified so that it does not add any errors, LogonAction is instantiated. It can find the success forward, but not the forward for mapping.getInput(): System.out.println(success forward = + mapping.findForward(success)); System.out.println(mapping.getInput() = + mapping.getInput()); System.out.println(input forward = + new ActionForward(mapping.getInput())); results in: success forward = ActionForward[success] mapping.getInput() = /logon.jsp input forward = ActionForward[null] Again, even if there are errors, the logon.jsp page is re-displayed. my struts-config.xml: global-forwardsforward name=success path=/logon.jsp//global-forwards action-mappings action path=/logon type=org.apache.struts.webapp.example.LogonAction name=logonForm scope=request input=/logon.jsp /action /action-mappings So, if the form returns errors, its associated jsp page automatically displayed again? Why can't ActionForward(mapping.getInput()) find the path? Or is this ActionForward[null] just a misleading artifact? [I can't get Forte for Java configured to debug and I'm tired of printlns. I sure hope VAJava3.5.3 works soon.] Thanks in advance, Roxie
RE: Packaging Question - Include Source in Binary Distributions?
EXTREMELY useful!! Please continue to do so. It allows me to go beyond the User Guide and Javadocs to understand how things work and so how to make them work for me. Thanks! Scott -Original Message- From: Craig R. McClanahan [mailto:[EMAIL PROTECTED]] Sent: Monday, April 23, 2001 1:31 PM To: [EMAIL PROTECTED]; [EMAIL PROTECTED] Subject: Packaging Question - Include Source in Binary Distributions? As we move towards a 1.0 release of Struts (really! :-), one of the things I am cleaning up is the way that binary distributions are packaged. Currently, we follow the typical Jakarta pattern of including the source code for Struts in the binary distribution (in the etc, src, and web directories), as well as in a separate download. My question is, do people find the fact that the binary distribution includes source code useful, or would it be OK to just point you at the download URL for the source distribution if you want it? For recent builds, this would cut the size of the binary distribution by about one third. I'm fine with doing it either way, but wanted to get some feedback from the community before making a final decision. Craig
RE: How can I use a Image as a submit button using struts
Um, I thought the html:image tag did this and doesn't it generate an input type=image tag? Scott -Original Message- From: Kyle Robinson [mailto:[EMAIL PROTECTED]] Sent: Wednesday, April 25, 2001 4:00 PM To: '[EMAIL PROTECTED]' Subject: RE: How can I use a Image as a submit button using struts The best way I've found of doing this is with a little javascript as follows: a href=javascript:submit(); img src=images/buttons/save.gif name=save border=0 /a For the purposes of using Struts we made a custom tag to create these... -Original Message- From: Natra, Uday [mailto:[EMAIL PROTECTED]] Sent: Wednesday, April 25, 2001 15:45 To: '[EMAIL PROTECTED]' Subject: How can I use a Image as a submit button using struts Hi, Can anybody tell me how I can simulate the functionality of Img Type = Submit / I mean I need to use an Image as a submit button. Thanks, Uday.
Submitting from one webapp to another
We're trying to separate the pages in our app into secure and non-secure. As part of that, we would like to have situations like the login page, the one that displays the form for getting your username and password, to be in the non-secure section and the Action that receives the submit from the login form to be in the secure section. But the html:form tag won't let us do that because it would mean something like this: html:form action=https://secure.site.domain/handleLogin.od; or some such URL. html:form appears to expect/require an Action (defined in your local struts-config.xml file) to be the value of the action= attribute. Why is this required, that is, while it is nice for html:form to attempt to help out when setting up the action= of the form tag it generates, why won't it also allow any old URL? Of course, I could just use my own form tag with the correct action= to POST to the secure Action, but I think that means I can't use the rest of the html:* tags, like html:text, right? Is this just a limitation of struts that should/will be addressed? Or are we trying to do something that we shouldn't try to do? For example, we could, of course, put both the page to display the form and the Action to accept it on the same, secure server, but that wasn't the way we wanted to design things. Are we trying to design it in a bad way, or is struts unnecessarily limiting us? Thanks for any info, Scott
Performance of jsp:include of action?
I'm trying to decide how to structure our app. We want to use templates to separate the layout from the content, and we want to use the Struts framework to separate the business logic from the presentation. I've been converting several parts of our site and am happy with the results. However, we also want to, as much as possible, separate out reusable parts of the presentation into separate JSP pages (sort of "components"). For example, we have a header and have it separated into header.jsp. This JSP page can take parameters and can also adjust itself based on its "environment", that is, what it finds in the request. But to do so, it has a bunch of Java in the JSP (it was also developed before I came and without an eye to keeping the business logic separate). What I'd like to do is change the header.jsp to pull the Java out. I see several possible ways to do that. One is to essentially develop an Action that sets up for the JSP and then forwards to the JSP. So, for example, that would change the code in my current pages like: jsp:include page="/components/header.jsp" flush="true"jsp:param name="atab" value="main"//jsp:include to look like: jsp:include page="/components/header.do" flush="true"jsp:param name="atab" value="main"//jsp:include but I'm not sure what the performance implications of this would be. That is, what is the difference between a jsp:include of a JSP page versus an Action. In the case of the Action, it would be routed through the app server (resin in our case...for now), through the ActionServlet and Action, and then forwarded to the JSP. (Now that I think of it, I'm not sure this would even work, but I think it should.) In the JSP case, is it also routed through the app server, so the only difference is where the business logic is done? Another idea I have is to create one or more custom tags that will set up for the header JSP. That way, the JSP could be included just as header.jsp, but the Java and business logic would have been extracted to the custom tag(s). The negative of this is it is a departure from the Struts architecture and puts the business logic in a sort of unexpected place. The last idea I had was to somehow cause the Action for the enclosing page (that is, the page that does the jsp:include of the header) to do the logic and setup necessary for the header. Then the header would just get what it needs from the request and could remain a JSP, not an Action. The negative of this is that the logic for the header would be performed by the Actions of all the pages, although it could be included in the BaseAction that I extend for my Actions. BTW, we have one motivation that others may not have: we are developing an example application that will be given to our customers to base their app on. So we want to structure things in the best, most understandable way. Thanks for any help, Scott
RE: Performance of jsp:include of action?
Hmmm, maybe I made it too complicated by mentioning templates...that really isn't my question. My question is more about the performance of doing a jsp:include of a JSP file versus an Action (that is, something like "header.do"). Another aspect of my question is what are the negative implications of pulling the business logic out of the JSP and into a custom tag as opposed to an Action class. If you do this, the architecture of your app becomes a little more complicated and a little harder for others to understand, doesn't it? Scott -Original Message- From: Mario Laureti [mailto:[EMAIL PROTECTED]] Sent: Thursday, April 19, 2001 8:47 AM To: [EMAIL PROTECTED] Subject: Re: Performance of jsp:include of action? I am not sure if I understand your question correctly but have you check the struts-template web application example that comes with the struts framework? This might give you a good indication on how to build a good template using Struts. You can also create custom tags instead of having Java in your jsp... Mario L. [EMAIL PROTECTED] 04/19/01 11:27AM I'm trying to decide how to structure our app. We want to use templates to separate the layout from the content, and we want to use the Struts framework to separate the business logic from the presentation. I've been converting several parts of our site and am happy with the results. However, we also want to, as much as possible, separate out reusable parts of the presentation into separate JSP pages (sort of "components"). For example, we have a header and have it separated into header.jsp. This JSP page can take parameters and can also adjust itself based on its "environment", that is, what it finds in the request. But to do so, it has a bunch of Java in the JSP (it was also developed before I came and without an eye to keeping the business logic separate). What I'd like to do is change the header.jsp to pull the Java out. I see several possible ways to do that. One is to essentially develop an Action that sets up for the JSP and then forwards to the JSP. So, for example, that would change the code in my current pages like: jsp:include page="/components/header.jsp" flush="true"jsp:param name="atab" value="main"//jsp:include to look like: jsp:include page="/components/header.do" flush="true"jsp:param name="atab" value="main"//jsp:include but I'm not sure what the performance implications of this would be. That is, what is the difference between a jsp:include of a JSP page versus an Action. In the case of the Action, it would be routed through the app server (resin in our case...for now), through the ActionServlet and Action, and then forwarded to the JSP. (Now that I think of it, I'm not sure this would even work, but I think it should.) In the JSP case, is it also routed through the app server, so the only difference is where the business logic is done? Another idea I have is to create one or more custom tags that will set up for the header JSP. That way, the JSP could be included just as header.jsp, but the Java and business logic would have been extracted to the custom tag(s). The negative of this is it is a departure from the Struts architecture and puts the business logic in a sort of unexpected place. The last idea I had was to somehow cause the Action for the enclosing page (that is, the page that does the jsp:include of the header) to do the logic and setup necessary for the header. Then the header would just get what it needs from the request and could remain a JSP, not an Action. The negative of this is that the logic for the header would be performed by the Actions of all the pages, although it could be included in the BaseAction that I extend for my Actions. BTW, we have one motivation that others may not have: we are developing an example application that will be given to our customers to base their app on. So we want to structure things in the best, most understandable way. Thanks for any help, Scott
RE: handling the errors
Object aeObj = request.getAttribute(Action.ERROR_KEY); if (aeObj != null aeObj instanceof ActionErrors) { ActionErrors ae = (ActionErrors)aeObj; if (!ae.empty()) { ... Scott -Original Message- From: Charlemagne L. Rey [mailto:[EMAIL PROTECTED]] Sent: Thursday, April 12, 2001 12:25 PM To: [EMAIL PROTECTED] Subject: Re: handling the errors no, nothing to be sorry... thank you for your help. anyway, i'm moving on and i have this situation... i tried your idea, to forward to another page if ever i encounter an error. now, my problem is i do not know how to access the ActionErrors instane from my jsp error page, do you have any idea? thanks a lot. John Raley wrote: Sorry, thought it was #2... Charlemagne L. Rey wrote: i would like to have a separate jsp page for errors. from the choices that you've given me, it's #1. Anthony Martin wrote: I interpreted two possible questions form your message: 1. You want to have a JSP devoted to showing a form and a separate JSP devoted to showing the validation errors? 2. You want to have a general error page for handling exceptions that occur. Which one were you asking? Or was I wildly off base? Anthony
RE: Where are Struts messages found?
Your application's web.xml file (probably in your WEB-INF directory) should include a servlet tag that defines and configures the ActionServlet. Part of that is something like: init-param param-nameapplication/param-name param-valuecom.yourdomain.yourpackage.Resources/param-value /init-param This is used to find the messages file, which in this case would be the file at: WEB-INF/classes/com/yourdomain/yourpackage/Resources.properties Scott -Original Message- From: James Howe [mailto:[EMAIL PROTECTED]] Sent: Wednesday, April 11, 2001 8:34 AM To: [EMAIL PROTECTED] Subject: Where are Struts messages found? I'm working with Struts and I'm trying to build an error page for my JSP application. In looking at the Struts tag code I see statements which look like this: throw new JspException(messages.getMessage("getter.bean", beanName))); which looks like it should be populating the exception with some useful information. However, when I execute this code in a debugger, the message assigned to the Exception is null because there is no message with the name "getter.bean". Where would I find definitions for messages such as "getter.bean", "optionsTag.iterator", etc?
RE: Extending struts classes
When an action request is received by the ActionServlet, one of the things it tries to do is set up the form bean (specified by a combination of a form-bean tag and your action tag in your struts-config.xml file). It tries to reuse one, and if it can't find one under the attribute name you gave, it creates one. Then it calls one of the util routines to populate it from the request using reflection. So, you should have an instance of your form bean, saved in the request under the attribute name you specified, available when your Action class' perform() method is called. I'm trying to figure out some similar "timing" things, and what I was thinking of doing was to create a base class that extends Action. Then I can do things in that class that are common to all (or a set of) my Actions and then continue with the perform activities specific to a particular Action. So, for example (pseudo code): public class BaseAction extends Action { ... public ActionForward perform(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { ... stuff for all Actions ... } } public class MyAction extends BaseAction { ... public ActionForward perform(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { super.perform(...); ... do my stuff ... OR, you could do... initUsingSession(...); // assuming this is defined in your BaseAction ... do my stuff ... } } Hope this helps, Scott -Original Message- From: Steve A Drake [mailto:[EMAIL PROTECTED]] Sent: Wednesday, April 11, 2001 9:02 AM To: [EMAIL PROTECTED]; [EMAIL PROTECTED] Subject: Re: Extending struts classes On Wed, 11 Apr 2001 [EMAIL PROTECTED] wrote: I want to add a function to all of my forms in which the form is capable of initialising its contents. e.g. public void initUsingSession(HttpSession session) I want to pass the session to this function so that I can populate values on the form depending on what is stored in the session. The trouble with this is that when would I call this function? I looked in the FormTag class, and I noticed that if it couldn't find the form class then it just created a new instance of it. This means I can't call that function. Any ideas? Don't know if it'll meet your needs but, instead of invoking your JSP directly, you could invoke the associated action class. In this class, you can get a handle on the session object and your action form object. Once you've initialized the ActionForm, forward to the view JSP.
RE: Finding DTD when disconnected from Internet
Short of taking the nightly build, I just extracted the required DTDs out of the struts.jar file and put them beneath WEB-INF/classes (I'm using resin). That seemed to work fine, but, of course, it would be nice if the software could find them in struts.jar. ;-) Scott -Original Message- From: Rob Leland [mailto:[EMAIL PROTECTED]] Sent: Wednesday, April 11, 2001 4:13 PM To: [EMAIL PROTECTED] Subject: Re: Finding DTD when disconnected from Internet Update to the latest nightly build, this problem was fixed about 5 weeks ago. -Rob "Assenza, Chris" wrote: Well, here I am again - new problem. :| (BTW, thanks to all for helping, this is by far one of the best list I've been on). Problem: Okay, I've been working with WebSphere and JBoss to get a Struts app working. So far my efforts have been very successful. However, today I hit a new bug. Assume your PC is not connected to the Internet -- ie. its just a local app. In WebSphere in particular, but also in JBoss, Struts will fail because it goes out to find the DTD for web_app_2_2 from Sun and struts-config from the Jakarta site. After countless efforts to make Digester search for the DTD locally, I have had no success. I am required to use the SYSTEM identifier and not PUBLIC. The only thing I've had success with is making the two xml files standalone (ie. standalone="yes"). SAX returns beaucoup errors, but the app "half-works" -- pages will at least come up. Does anyone know how to fix this easily...without connecting the machine to the Net (it's an Intranet app). My knowledge of XML is okay, DTD's fairly week (incl. !DOCTYPE). Thanks, Chris Assenza
Problem finding classes after forward (resend)
Many apologies for resending this, but I had not finished subscribing when I sent it the first time, and I don't know if it was, therefore, filtered out (since I didn't receive it ;-). Sorry, but I'm still having the problem described below: -Original Message- From: Scott Cressler Sent: Thursday, April 05, 2001 8:22 AM To: '[EMAIL PROTECTED]' Subject: Problem finding classes after forward I'm trying to refit an existing page to use struts. The JSP page that I forward to at the end of my Action class uses some classes, but when forwarding to it through the struts ActionForward mechanism, the page seems unable to find the classes. Strangely enough, one that it can't find is my form bean class, which it just used in the Action class. I was trying to get to that class both through a jsp:useBean and through jsp:getProperty. The exception I get is: java.lang.ClassCastException: com.propel.webapp.actions.AddressForm at _jsp._abe2__jsp._jspService(/abe2.jsp:26) at com.caucho.jsp.JavaPage.service(JavaPage.java:89) at com.caucho.jsp.JavaPage.subservice(JavaPage.java:83) at com.caucho.jsp.Page.service(Page.java:280) at com.caucho.jsp.QServlet.service(QServlet.java:161) at com.caucho.server.http.AbstractRequest.service(AbstractRequest.java:450) at com.caucho.server.http.AbstractRequest.service(AbstractRequest.java:393) at com.caucho.server.http.PageCache$Entry.service(PageCache.java:252) at com.caucho.server.http.PageCache.service(PageCache.java:103) at com.caucho.server.http.VirtualHost.service(VirtualHost.java:395) at com.caucho.server.http.QRequestDispatcher.forward(QRequestDispatcher.java:14 7) at com.caucho.server.http.QRequestDispatcher.forward(QRequestDispatcher.java:80 ) at org.apache.struts.action.ActionServlet.processActionForward(ActionServlet.ja va:1697) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1540) at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:491) at javax.servlet.http.HttpServlet.service(HttpServlet.java:102) at javax.servlet.http.HttpServlet.service(HttpServlet.java:83) at com.caucho.server.http.AbstractRequest.service(AbstractRequest.java:450) at com.caucho.server.http.AbstractRequest.service(AbstractRequest.java:393) at com.caucho.server.http.PageCache$Entry.service(PageCache.java:252) at com.caucho.server.http.PageCache.service(PageCache.java:103) at com.caucho.server.http.VirtualHost.service(VirtualHost.java:395) at com.caucho.server.http.Request.dispatch(Request.java:211) at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:201) at com.caucho.server.http.HttpRequest.handleConnection(HttpRequest.java:142) at com.caucho.server.TcpConnection.run(TcpConnection.java:145) at java.lang.Thread.run(Thread.java:484) This is happening at the useBean line: jsp:useBean id="addressForm" class="com.propel.webapp.actions.AddressForm" scope="request" / I'm not sure why it's a ClassCastException, as that would seem to imply that the useBean found something under the property "addressForm", but that it was of the wrong class? I've also tried just adding scriptlet code to use a different class, but one that I know is in the classpath and is also in the WEB-INF/classes of the docroot. I also get a ClassCastException from the following code: % PageHelper pageHelper = (PageHelper)request.getAttribute("pageHelper"); if (pageHelper == null) pageHelper = new PageHelper(request, response); % I have the correct import above to find this class. The thing that leads me to think there's either a bug in struts or I'm missing something about how to use it is that this JSP page works fine if I just load it directly, that is, hitting it's URL directly. The classes can be found just fine. Any ideas why this would be happening? Is this a known bug with struts or am I just missing some configuration? We are using Resin standalone for our JSP/Servlet engine/web server. Thanks for any help, Scott
RE: Problem finding classes after forward (resend)
Ummm, I'm not using WebLogic ;-) I've figured out some of the problem. I can't do a jsp:useBean of my formBean because (in ActionServlet.processActionForm() ) the bean is put into the request as an ActionForm, not as my class. So I can cast it to ActionForm, but not to my class (com.propel.webapp.actions.AddressForm). I can probably figure out a way around that (maybe by using the bean tags?), but the other problem I'm having is still confusing me Keep on digging, Scott -Original Message- From: Abraham Kang [mailto:[EMAIL PROTECTED]] Sent: Thursday, April 05, 2001 11:07 AM To: [EMAIL PROTECTED] Subject: RE: Problem finding classes after forward (resend) Hi Scott, This might be a problem with WebLogic. I think this problem is prevelant in WebLogic 5.1. You might want to do a search on ClassCastException in the WebLogic 5.1 docs and newsgroups. --Abraham -Original Message- From: Scott Cressler [mailto:[EMAIL PROTECTED]] Sent: Thursday, April 05, 2001 8:50 AM To: '[EMAIL PROTECTED]' Subject: Problem finding classes after forward (resend) Many apologies for resending this, but I had not finished subscribing when I sent it the first time, and I don't know if it was, therefore, filtered out (since I didn't receive it ;-). Sorry, but I'm still having the problem described below: -Original Message- From: Scott Cressler Sent: Thursday, April 05, 2001 8:22 AM To: '[EMAIL PROTECTED]' Subject: Problem finding classes after forward I'm trying to refit an existing page to use struts. The JSP page that I forward to at the end of my Action class uses some classes, but when forwarding to it through the struts ActionForward mechanism, the page seems unable to find the classes. Strangely enough, one that it can't find is my form bean class, which it just used in the Action class. I was trying to get to that class both through a jsp:useBean and through jsp:getProperty. The exception I get is: java.lang.ClassCastException: com.propel.webapp.actions.AddressForm at _jsp._abe2__jsp._jspService(/abe2.jsp:26) at com.caucho.jsp.JavaPage.service(JavaPage.java:89) at com.caucho.jsp.JavaPage.subservice(JavaPage.java:83) at com.caucho.jsp.Page.service(Page.java:280) at com.caucho.jsp.QServlet.service(QServlet.java:161) at com.caucho.server.http.AbstractRequest.service(AbstractRequest .java:450) at com.caucho.server.http.AbstractRequest.service(AbstractRequest .java:393) at com.caucho.server.http.PageCache$Entry.service(PageCache.java:252) at com.caucho.server.http.PageCache.service(PageCache.java:103) at com.caucho.server.http.VirtualHost.service(VirtualHost.java:395) at com.caucho.server.http.QRequestDispatcher.forward(QRequestDispatch er.java:14 7) at com.caucho.server.http.QRequestDispatcher.forward(QRequestDispatch er.java:80 ) at org.apache.struts.action.ActionServlet.processActionForward(Action Servlet.ja va:1697) at org.apache.struts.action.ActionServlet.process(ActionServlet.j ava:1540) at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:491) at javax.servlet.http.HttpServlet.service(HttpServlet.java:102) at javax.servlet.http.HttpServlet.service(HttpServlet.java:83) at com.caucho.server.http.AbstractRequest.service(AbstractRequest .java:450) at com.caucho.server.http.AbstractRequest.service(AbstractRequest .java:393) at com.caucho.server.http.PageCache$Entry.service(PageCache.java:252) at com.caucho.server.http.PageCache.service(PageCache.java:103) at com.caucho.server.http.VirtualHost.service(VirtualHost.java:395) at com.caucho.server.http.Request.dispatch(Request.java:211) at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:201) at com.caucho.server.http.HttpRequest.handleConnection(HttpReques t.java:142) at com.caucho.server.TcpConnection.run(TcpConnection.java:145) at java.lang.Thread.run(Thread.java:484) This is happening at the useBean line: jsp:useBean id="addressForm" class="com.propel.webapp.actions.AddressForm" scope="request" / I'm not sure why it's a ClassCastException, as that would seem to imply that the useBean found something under the property "addressForm", but that it was of the wrong class? I've also tried just adding scriptlet code to use a different class, but one that I know is in the classpath and is also in the WEB-INF/classes of the docroot. I also get a ClassCastException from the following code: % PageHelper pageHelper = (PageHelper)request.getAttribute("pageHelper"); if (pageHelper == null) pageHelper = new PageHelper(request, response); % I have the correct import above to find this class. The
RE: how to access related ActionForm from within .jsp?
I was just looking at this code to try to figure out my problem (Problem finding classes after forward (resend)). I have learned some things, although I wouldn't say I really understand all of them, yet. When you go into the ActionServlet and are being directed to an Action, if there is a formbean associated with the action (the "name=" attribute of the action tag in the struts-config.xml file), the ActionServlet will try to get such a named object from the request. If it doesn't find it, it creates an instance of the class you specified in the form-bean tag (also in the struts-config.xml file) and then puts it in the request under the name you specified in the action tag. So, theoretically, you should just be able to pull it out of the request in your .jsp file and use it, either using jsp:useBean or scriptlet code that uses request.getAttribute(). Okay, here's the bad news...it doesn't work for me. I found that the reason it doesn't work is that the ActionServlet code is referring to the formbean object as an ActionForm at the time that it puts it into the request. I'm not sure why, but when you take it out, using one of the above techniques, it can only be cast to be an ActionForm! The reason the html:* tags, like html:text, work is because they don't try to cast to your class. Instead, they use introspection to call the getter for the property. It may be possible to use the bean:* tags to access that bean, but our ISP is currently having problems, so I can't check :-( Does anyone else think this is a problem? Shouldn't I be able to do a jsp:useBean on a bean that is my class? For example, I (like Daniel?) need to get data out of the bean outside of the html:form context (e.g., to display the user's name when editing the address)? BTW, I may have some configuration problem that is making this not work for me...so it might work for you. I'm going to try something else and will report if it works. Scott -Original Message- From: Deadman, Hal [mailto:[EMAIL PROTECTED]] Sent: Thursday, April 05, 2001 12:11 PM To: [EMAIL PROTECTED] Subject: RE: how to access related ActionForm from within .jsp? The form bean is associated with an action, not a jsp. The jsp may contain an html:form which references an action, thereby gaining access to the form associated with that action. A jsp could have multiple html:forms. The form bean associated with the action is available in request scope for the jsp but I don't know how you would get access to it without using the name of the form. Is there a struts tag that will get actionmapping values when given the name of the action? That would allow you to get the form bean name using the same action used by the html:form. Maybe you could use the bean:struts tag to get the action mapping and then get the form from that. Hal -Original Message- From: Daniel Toms [mailto:[EMAIL PROTECTED]] Sent: Thursday, April 05, 2001 2:50 PM To: Struts-User Subject: how to access related ActionForm from within .jsp? I am having a common problem all over the place. Struts allows you to associate a bean(the ActionForm) with a given .jsp. It then magically gets and sets input fields for you. Great. But all of the other struts tags require a reference to a bean by name, using the name="foo" argument to the tag. My problem is, I want to reference the bean associated with my jsp, so that when I want to iterated over a collection it contains, I can do so without having to know the bean's name. example: public final class FooForm extends ActionForm { public Collection bar; public Collection getBar() { return bar; } public void setBar(Collection b { this.bar = b; } } then in my jsp: logic:iterate name="???" id="criterion" TR TDbean:write name="criterion" property="propertyName"//TD TDbean:write name="criterion" property="operator"//TD TDbean:write name="criterion" property="propertyValue"//TD /TR /logic:iterate So the iterate tag doesn't work because it wants a bean by name, but is there something I haven't gotten that will make struts use the bean associated with the jsp and not one specified by name? thanks, dan
RE: how to access related ActionForm from within .jsp?
OK, problem solved! The problem was a (for me) very esoteric aspect of Java. The class loader used when loading the class when it was created (within struts) was *different* from the class loader used when attempting to load the class, e.g., for casting, within my .jsp files. This made a difference, *even though* the class that was loaded was the same file from the *SAME* directory! Apparently, the internal identifier used to identify the class is different depending on the class loader used. The problem was that I had put my docroot/WEB-INF/classes directory in the class path used by resin as well as the fact that it is the class directory used automatically to find classes used by .jsp files. So struts used one class loader and the .jsp system used another. The solution was to remove the classes from docroot/WEB-INF/classes directory. Instead, I put it in the directory tree used to build our product's jar file, which is already in the resin classpath. So there was only one way to find the class. I don't much like this solution, because I think the actions are specific to the particular application and so should fit in the docroot/WEB-INF/classes directory. Unfortunately, if I remove them from the resin classpath, struts can't find them. I'll have to think some more on how best to organize this. Maybe I'll put them in a jar file that is specific to the application, but which is not in the docroot/WEB-INF/classes directory. If you are still having trouble getting access to the form bean, let me know and I'll give you specific code examples of how I do it. Scott -Original Message- From: Deadman, Hal [mailto:[EMAIL PROTECTED]] Sent: Thursday, April 05, 2001 1:16 PM To: [EMAIL PROTECTED] Subject: RE: how to access related ActionForm from within .jsp? You are using redirect="false", correct? It shouldn't matter what type is used when the action form is put in the request. setAttribute takes an Object so you can put anything in there but it will actually be the type of the form bean specified in struts-config.xml. Can you submit the section of the struts-config.xml file that contains the actions you are using? There should be one action that forwards to the jsp with a redirect=false. There should be another action that your jsp submits to. Both actions should use the same form. You may want to submit part of the jsp that tries to access the form bean. Hal -Original Message- From: Scott Cressler [mailto:[EMAIL PROTECTED]] Sent: Thursday, April 05, 2001 3:58 PM To: '[EMAIL PROTECTED]' Subject: RE: how to access related ActionForm from within .jsp? I was just looking at this code to try to figure out my problem (Problem finding classes after forward (resend)). I have learned some things, although I wouldn't say I really understand all of them, yet. When you go into the ActionServlet and are being directed to an Action, if there is a formbean associated with the action (the "name=" attribute of the action tag in the struts-config.xml file), the ActionServlet will try to get such a named object from the request. If it doesn't find it, it creates an instance of the class you specified in the form-bean tag (also in the struts-config.xml file) and then puts it in the request under the name you specified in the action tag. So, theoretically, you should just be able to pull it out of the request in your .jsp file and use it, either using jsp:useBean or scriptlet code that uses request.getAttribute(). Okay, here's the bad news...it doesn't work for me. I found that the reason it doesn't work is that the ActionServlet code is referring to the formbean object as an ActionForm at the time that it puts it into the request. I'm not sure why, but when you take it out, using one of the above techniques, it can only be cast to be an ActionForm! The reason the html:* tags, like html:text, work is because they don't try to cast to your class. Instead, they use introspection to call the getter for the property. It may be possible to use the bean:* tags to access that bean, but our ISP is currently having problems, so I can't check :-( Does anyone else think this is a problem? Shouldn't I be able to do a jsp:useBean on a bean that is my class? For example, I (like Daniel?) need to get data out of the bean outside of the html:form context (e.g., to display the user's name when editing the address)? BTW, I may have some configuration problem that is making this not work for me...so it might work for you. I'm going to try something else and will report if it works. Scott -Original Message- From: Deadman, Hal [mailto:[EMAIL PROTECTED]] Sent: Thursday, April 05, 2001 12:11 PM To: [EMAIL PROTECTED] Subject: RE: how to access related ActionF
RE: Problem finding classes after forward (resend)
Problem solved. See solution in response to RE: how to access related ActionForm from within .jsp? Scott -Original Message- From: Scott Cressler [mailto:[EMAIL PROTECTED]] Sent: Thursday, April 05, 2001 11:03 AM To: '[EMAIL PROTECTED]' Subject: RE: Problem finding classes after forward (resend) Ummm, I'm not using WebLogic ;-) I've figured out some of the problem. I can't do a jsp:useBean of my formBean because (in ActionServlet.processActionForm() ) the bean is put into the request as an ActionForm, not as my class. So I can cast it to ActionForm, but not to my class (com.propel.webapp.actions.AddressForm). I can probably figure out a way around that (maybe by using the bean tags?), but the other problem I'm having is still confusing me Keep on digging, Scott -Original Message- From: Abraham Kang [mailto:[EMAIL PROTECTED]] Sent: Thursday, April 05, 2001 11:07 AM To: [EMAIL PROTECTED] Subject: RE: Problem finding classes after forward (resend) Hi Scott, This might be a problem with WebLogic. I think this problem is prevelant in WebLogic 5.1. You might want to do a search on ClassCastException in the WebLogic 5.1 docs and newsgroups. --Abraham -Original Message- From: Scott Cressler [mailto:[EMAIL PROTECTED]] Sent: Thursday, April 05, 2001 8:50 AM To: '[EMAIL PROTECTED]' Subject: Problem finding classes after forward (resend) Many apologies for resending this, but I had not finished subscribing when I sent it the first time, and I don't know if it was, therefore, filtered out (since I didn't receive it ;-). Sorry, but I'm still having the problem described below: -Original Message- From: Scott Cressler Sent: Thursday, April 05, 2001 8:22 AM To: '[EMAIL PROTECTED]' Subject: Problem finding classes after forward I'm trying to refit an existing page to use struts. The JSP page that I forward to at the end of my Action class uses some classes, but when forwarding to it through the struts ActionForward mechanism, the page seems unable to find the classes. Strangely enough, one that it can't find is my form bean class, which it just used in the Action class. I was trying to get to that class both through a jsp:useBean and through jsp:getProperty. The exception I get is: java.lang.ClassCastException: com.propel.webapp.actions.AddressForm at _jsp._abe2__jsp._jspService(/abe2.jsp:26) at com.caucho.jsp.JavaPage.service(JavaPage.java:89) at com.caucho.jsp.JavaPage.subservice(JavaPage.java:83) at com.caucho.jsp.Page.service(Page.java:280) at com.caucho.jsp.QServlet.service(QServlet.java:161) at com.caucho.server.http.AbstractRequest.service(AbstractRequest .java:450) at com.caucho.server.http.AbstractRequest.service(AbstractRequest .java:393) at com.caucho.server.http.PageCache$Entry.service(PageCache.java:252) at com.caucho.server.http.PageCache.service(PageCache.java:103) at com.caucho.server.http.VirtualHost.service(VirtualHost.java:395) at com.caucho.server.http.QRequestDispatcher.forward(QRequestDispatch er.java:14 7) at com.caucho.server.http.QRequestDispatcher.forward(QRequestDispatch er.java:80 ) at org.apache.struts.action.ActionServlet.processActionForward(Action Servlet.ja va:1697) at org.apache.struts.action.ActionServlet.process(ActionServlet.j ava:1540) at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:491) at javax.servlet.http.HttpServlet.service(HttpServlet.java:102) at javax.servlet.http.HttpServlet.service(HttpServlet.java:83) at com.caucho.server.http.AbstractRequest.service(AbstractRequest .java:450) at com.caucho.server.http.AbstractRequest.service(AbstractRequest .java:393) at com.caucho.server.http.PageCache$Entry.service(PageCache.java:252) at com.caucho.server.http.PageCache.service(PageCache.java:103) at com.caucho.server.http.VirtualHost.service(VirtualHost.java:395) at com.caucho.server.http.Request.dispatch(Request.java:211) at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:201) at com.caucho.server.http.HttpRequest.handleConnection(HttpReques t.java:142) at com.caucho.server.TcpConnection.run(TcpConnection.java:145) at java.lang.Thread.run(Thread.java:484) This is happening at the useBean line: jsp:useBean id="addressForm" class="com.propel.webapp.actions.AddressForm" scope="request" / I'm not sure why it's a ClassCastException, as that would seem to imply that the useBean found something under the property "addressForm", but that it was of the wrong class? I've also tried just adding scriptlet code to use