RE: [OT] Re: 4th Of July Struts Challenge...
A few comments: 1. I got runtime errors when I declared a DynaActionForm bean of type Map; I had to declare it of type HashMap. 2. You may be using JSTL, but it still looks like scripting to me. 3. Strictly speaking, JavaBeans do not contain a constructor and implement Serializable. Mark -Original Message- From: Rick Reumann [mailto:[EMAIL PROTECTED] Sent: Tuesday, July 15, 2003 11:44 PM To: Struts Users Mailing List Subject: [OT] Re: 4th Of July Struts Challenge... Kris... this was just awesome! Thanks. You da 'man:) On Tue, Jul 15,'03 (11:25 AM GMT-0400), Kris wrote: As it turns out, some of my ideas about a standard property of type Map versus a mapped property were a bit off. So, if you're still interested, here's something I hacked together. You'll notice I used a session scoped form so that Struts doesn't choke when it tries to populate the form. struts-config.xml: -- form-beans form-bean name=employeesForm type=org.apache.struts.action.DynaActionForm form-property name=employeesMap type=java.util.Map/ /form-bean /form-beans action-mappings action path=/employees/edit type=com.dotech.EditEmployeesAction name=employeesForm scope=session validate=false forward name=success path=/editEmployees.jsp/ /action action path=/employees/save type=org.apache.struts.actions.ForwardAction parameter=/viewEmployees.jsp name=employeesForm scope=session validate=false/ /action-mappings editEmployees.jsp: -- %@ taglib prefix=bean uri=http://jakarta.apache.org/struts/tags-bean; %%@ taglib prefix=curi=http://java.sun.com/jstl/core; %%@ taglib prefix=html uri=http://jakarta.apache.org/struts/tags-html; % %-- dynamically get a handle to the form --% bean:struts id=mapping mapping=/employees/save/ c:set var=attribute value=${mapping.attribute}/ c:set var=scope value=${mapping.scope}/ c:choose c:when test=${scope eq 'request'} c:set var=form value=${requestScope[attribute]}/ /c:when c:otherwise c:set var=form value=${sessionScope[attribute]}/ /c:otherwise /c:choose html headtitleEdit Employees/title/head body html:form action=/employees/save table c:forEach var=entry items=${form.map.employeesMap} tr tdc:out value=${entry.key}//td td input type=text name=c:out value=employeesMap(${entry.key}).name/ value=c:out value=${entry.value.name}/ /td td input type=text name=c:out value=employeesMap(${entry.key}).age/ value=c:out value=${entry.value.age}/ /td /tr /c:forEach tr td align=center colspan=3html:submit//td /tr /table /html:form /body /html EmployeeBean.java: -- package com.dotech; public class EmployeeBean { private String name; private String age; public EmployeeBean(String name, String age) { this.name = name; this.age = age; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public String getAge() { return this.age; } public void setAge(String age) { this.age = age; } } EditEmployeesAction.java: - package com.dotech; import java.util.*; import javax.servlet.http.*; import org.apache.commons.beanutils.*; import org.apache.struts.action.*; public class EditEmployeesAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { Map empMap = new HashMap(); empMap.put(, new EmployeeBean(John Doe, 33)); empMap.put(, new EmployeeBean(Loser Boy, 22)); PropertyUtils.setProperty(form, employeesMap, empMap); return mapping.findForward(success); } } viewEmployees.jsp: -- %@ taglib prefix=bean uri=http://jakarta.apache.org/struts/tags-bean; %%@ taglib prefix=curi=http://java.sun.com/jstl/core; % %-- dynamically get a handle to the form --% bean:struts id=mapping mapping=/employees/save/ c:set var=attribute value=${mapping.attribute}/ c:set var=scope value=${mapping.scope}/ c:choose c:when test=${scope eq 'request'} c:set var=form value=${requestScope[attribute
RE: [OT] Re: 4th Of July Struts Challenge...
snip Strictly speaking, JavaBeans do not contain a constructor and implement Serializable. /snip Dont they just need to make sure a noargs constructor is available? Are they allowed to implement serializable if they want though? Be kinda funny if they couldnt... I wouldnt count expression evaluation languages as scripting myself. I reckon to be a script you need to be able to script stuff (in addition to having some kind of expression syntax): ie: do this and this and this... whereas an expression is merely a statement of value. Ie: a script would be add 1 + 1 and get the result whereas an expression is merely the value of 1 + 1. I guess you've been using LISP too long to understand the difference eh? ;- -Original Message- From: Mark Galbreath [mailto:[EMAIL PROTECTED] Sent: Wednesday, 16 July 2003 20:12 To: 'Struts Users Mailing List' Subject: RE: [OT] Re: 4th Of July Struts Challenge... A few comments: 1. I got runtime errors when I declared a DynaActionForm bean of type Map; I had to declare it of type HashMap. 2. You may be using JSTL, but it still looks like scripting to me. 3. Strictly speaking, JavaBeans do not contain a constructor and implement Serializable. Mark -Original Message- From: Rick Reumann [mailto:[EMAIL PROTECTED] Sent: Tuesday, July 15, 2003 11:44 PM To: Struts Users Mailing List Subject: [OT] Re: 4th Of July Struts Challenge... Kris... this was just awesome! Thanks. You da 'man:) On Tue, Jul 15,'03 (11:25 AM GMT-0400), Kris wrote: As it turns out, some of my ideas about a standard property of type Map versus a mapped property were a bit off. So, if you're still interested, here's something I hacked together. You'll notice I used a session scoped form so that Struts doesn't choke when it tries to populate the form. struts-config.xml: -- form-beans form-bean name=employeesForm type=org.apache.struts.action.DynaActionForm form-property name=employeesMap type=java.util.Map/ /form-bean /form-beans action-mappings action path=/employees/edit type=com.dotech.EditEmployeesAction name=employeesForm scope=session validate=false forward name=success path=/editEmployees.jsp/ /action action path=/employees/save type=org.apache.struts.actions.ForwardAction parameter=/viewEmployees.jsp name=employeesForm scope=session validate=false/ /action-mappings editEmployees.jsp: -- %@ taglib prefix=bean uri=http://jakarta.apache.org/struts/tags-bean; %%@ taglib prefix=curi=http://java.sun.com/jstl/core; %%@ taglib prefix=html uri=http://jakarta.apache.org/struts/tags-html; % %-- dynamically get a handle to the form --% bean:struts id=mapping mapping=/employees/save/ c:set var=attribute value=${mapping.attribute}/ c:set var=scope value=${mapping.scope}/ c:choose c:when test=${scope eq 'request'} c:set var=form value=${requestScope[attribute]}/ /c:when c:otherwise c:set var=form value=${sessionScope[attribute]}/ /c:otherwise /c:choose html headtitleEdit Employees/title/head body html:form action=/employees/save table c:forEach var=entry items=${form.map.employeesMap} tr tdc:out value=${entry.key}//td td input type=text name=c:out value=employeesMap(${entry.key}).name/ value=c:out value=${entry.value.name}/ /td td input type=text name=c:out value=employeesMap(${entry.key}).age/ value=c:out value=${entry.value.age}/ /td /tr /c:forEach tr td align=center colspan=3html:submit//td /tr /table /html:form /body /html EmployeeBean.java: -- package com.dotech; public class EmployeeBean { private String name; private String age; public EmployeeBean(String name, String age) { this.name = name; this.age = age; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public String getAge() { return this.age; } public void setAge(String age) { this.age = age; } } EditEmployeesAction.java: - package com.dotech; import java.util.*; import javax.servlet.http.*; import org.apache.commons.beanutils.*; import org.apache.struts.action.*; public class EditEmployeesAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form
RE: [OT] Re: 4th Of July Struts Challenge...
put a do before implement and ELs are just scripting in disguise. Bloody Aussie. -Original Message- From: Andrew Hill [mailto:[EMAIL PROTECTED] Sent: Wednesday, July 16, 2003 8:23 AM To: Struts Users Mailing List Subject: RE: [OT] Re: 4th Of July Struts Challenge... snip Strictly speaking, JavaBeans do not contain a constructor and implement Serializable. /snip Dont they just need to make sure a noargs constructor is available? Are they allowed to implement serializable if they want though? Be kinda funny if they couldnt... I wouldnt count expression evaluation languages as scripting myself. I reckon to be a script you need to be able to script stuff (in addition to having some kind of expression syntax): ie: do this and this and this... whereas an expression is merely a statement of value. Ie: a script would be add 1 + 1 and get the result whereas an expression is merely the value of 1 + 1. I guess you've been using LISP too long to understand the difference eh? ;- -Original Message- From: Mark Galbreath [mailto:[EMAIL PROTECTED] Sent: Wednesday, 16 July 2003 20:12 To: 'Struts Users Mailing List' Subject: RE: [OT] Re: 4th Of July Struts Challenge... A few comments: 1. I got runtime errors when I declared a DynaActionForm bean of type Map; I had to declare it of type HashMap. 2. You may be using JSTL, but it still looks like scripting to me. 3. Strictly speaking, JavaBeans do not contain a constructor and implement Serializable. Mark -Original Message- From: Rick Reumann [mailto:[EMAIL PROTECTED] Sent: Tuesday, July 15, 2003 11:44 PM To: Struts Users Mailing List Subject: [OT] Re: 4th Of July Struts Challenge... Kris... this was just awesome! Thanks. You da 'man:) On Tue, Jul 15,'03 (11:25 AM GMT-0400), Kris wrote: As it turns out, some of my ideas about a standard property of type Map versus a mapped property were a bit off. So, if you're still interested, here's something I hacked together. You'll notice I used a session scoped form so that Struts doesn't choke when it tries to populate the form. struts-config.xml: -- form-beans form-bean name=employeesForm type=org.apache.struts.action.DynaActionForm form-property name=employeesMap type=java.util.Map/ /form-bean /form-beans action-mappings action path=/employees/edit type=com.dotech.EditEmployeesAction name=employeesForm scope=session validate=false forward name=success path=/editEmployees.jsp/ /action action path=/employees/save type=org.apache.struts.actions.ForwardAction parameter=/viewEmployees.jsp name=employeesForm scope=session validate=false/ /action-mappings editEmployees.jsp: -- %@ taglib prefix=bean uri=http://jakarta.apache.org/struts/tags-bean; %%@ taglib prefix=curi=http://java.sun.com/jstl/core; %%@ taglib prefix=html uri=http://jakarta.apache.org/struts/tags-html; % %-- dynamically get a handle to the form --% bean:struts id=mapping mapping=/employees/save/ c:set var=attribute value=${mapping.attribute}/ c:set var=scope value=${mapping.scope}/ c:choose c:when test=${scope eq 'request'} c:set var=form value=${requestScope[attribute]}/ /c:when c:otherwise c:set var=form value=${sessionScope[attribute]}/ /c:otherwise /c:choose html headtitleEdit Employees/title/head body html:form action=/employees/save table c:forEach var=entry items=${form.map.employeesMap} tr tdc:out value=${entry.key}//td td input type=text name=c:out value=employeesMap(${entry.key}).name/ value=c:out value=${entry.value.name}/ /td td input type=text name=c:out value=employeesMap(${entry.key}).age/ value=c:out value=${entry.value.age}/ /td /tr /c:forEach tr td align=center colspan=3html:submit//td /tr /table /html:form /body /html EmployeeBean.java: -- package com.dotech; public class EmployeeBean { private String name; private String age; public EmployeeBean(String name, String age) { this.name = name; this.age = age; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public String getAge() { return this.age; } public void setAge(String age) { this.age = age; } } EditEmployeesAction.java: - package com.dotech; import java.util.*; import javax.servlet.http
RE: [OT] Re: 4th Of July Struts Challenge...
The no-argument constructor is the default and does not have to be declared. You have a 2-arg constructor. As for JSTL (or any EL) acting like straight scripting, I've never had an argument with using scripting where appropriate. Pragmatism should be the rule of the day. Finally, I don't know why declaring DynaActionForm beans as Maps didn't work for me, but neither is it a big issue. I realize the constraints of declaring a variable as a concrete/abstract class vs. as an interface. Besides, I like what you've created. :-) -Original Message- From: Kris Schneider [mailto:[EMAIL PROTECTED] Sent: Wednesday, July 16, 2003 8:55 AM To: Struts Users Mailing List Subject: RE: [OT] Re: 4th Of July Struts Challenge... Quoting Mark Galbreath [EMAIL PROTECTED]: A few comments: 1. I got runtime errors when I declared a DynaActionForm bean of type Map; I had to declare it of type HashMap. Not sure what you're doing, but the example works as coded. If it matters, post some details and we'll see if something needs fixing. 2. You may be using JSTL, but it still looks like scripting to me. Fair enough. What's your recommended alternative to JSTL when using JSP for your view layer? 3. Strictly speaking, JavaBeans do not contain a constructor and implement Serializable. Strictly speaking, a JavaBean *does* contain a construtctor (or even more than one), just like any other Java class. It's just that a real bean needs to have a no-arg constructor. The actual code that I uploaded to Rick includes a no-arg construtctor for EmployeeBean but omitted implementing Serializable or Externalizable. The bean also fails to act as an event source and it doesn't check for things like null values passed to either its construtctor or its set methods. Mark -Original Message- From: Rick Reumann [mailto:[EMAIL PROTECTED] Sent: Tuesday, July 15, 2003 11:44 PM To: Struts Users Mailing List Subject: [OT] Re: 4th Of July Struts Challenge... Kris... this was just awesome! Thanks. You da 'man:) On Tue, Jul 15,'03 (11:25 AM GMT-0400), Kris wrote: As it turns out, some of my ideas about a standard property of type Map versus a mapped property were a bit off. So, if you're still interested, here's something I hacked together. You'll notice I used a session scoped form so that Struts doesn't choke when it tries to populate the form. struts-config.xml: -- form-beans form-bean name=employeesForm type=org.apache.struts.action.DynaActionForm form-property name=employeesMap type=java.util.Map/ /form-bean /form-beans action-mappings action path=/employees/edit type=com.dotech.EditEmployeesAction name=employeesForm scope=session validate=false forward name=success path=/editEmployees.jsp/ /action action path=/employees/save type=org.apache.struts.actions.ForwardAction parameter=/viewEmployees.jsp name=employeesForm scope=session validate=false/ /action-mappings editEmployees.jsp: -- %@ taglib prefix=bean uri=http://jakarta.apache.org/struts/tags-bean; %%@ taglib prefix=curi=http://java.sun.com/jstl/core; %%@ taglib prefix=html uri=http://jakarta.apache.org/struts/tags-html; % %-- dynamically get a handle to the form --% bean:struts id=mapping mapping=/employees/save/ c:set var=attribute value=${mapping.attribute}/ c:set var=scope value=${mapping.scope}/ c:choose c:when test=${scope eq 'request'} c:set var=form value=${requestScope[attribute]}/ /c:when c:otherwise c:set var=form value=${sessionScope[attribute]}/ /c:otherwise /c:choose html headtitleEdit Employees/title/head body html:form action=/employees/save table c:forEach var=entry items=${form.map.employeesMap} tr tdc:out value=${entry.key}//td td input type=text name=c:out value=employeesMap(${entry.key}).name/ value=c:out value=${entry.value.name}/ /td td input type=text name=c:out value=employeesMap(${entry.key}).age/ value=c:out value=${entry.value.age}/ /td /tr /c:forEach tr td align=center colspan=3html:submit//td /tr /table /html:form /body /html EmployeeBean.java: -- package com.dotech; public class EmployeeBean { private String name; private String age; public EmployeeBean(String name
RE: [OT] Re: 4th Of July Struts Challenge...
It's my understanding that you ONLY get the default if there are no other constructors written. The minute you write ANY constructor, you're on your own. If you still want a default ctor, you've gotta supply it. I'll be happy to learn something if this is incorrect. - MOD --- Mark Galbreath [EMAIL PROTECTED] wrote: The no-argument constructor is the default and does not have to be declared. You have a 2-arg constructor. As for JSTL (or any EL) acting like straight scripting, I've never had an argument with using scripting where appropriate. Pragmatism should be the rule of the day. Finally, I don't know why declaring DynaActionForm beans as Maps didn't work for me, but neither is it a big issue. I realize the constraints of declaring a variable as a concrete/abstract class vs. as an interface. Besides, I like what you've created. :-) -Original Message- From: Kris Schneider [mailto:[EMAIL PROTECTED] Sent: Wednesday, July 16, 2003 8:55 AM To: Struts Users Mailing List Subject: RE: [OT] Re: 4th Of July Struts Challenge... Quoting Mark Galbreath [EMAIL PROTECTED]: A few comments: 1. I got runtime errors when I declared a DynaActionForm bean of type Map; I had to declare it of type HashMap. Not sure what you're doing, but the example works as coded. If it matters, post some details and we'll see if something needs fixing. 2. You may be using JSTL, but it still looks like scripting to me. Fair enough. What's your recommended alternative to JSTL when using JSP for your view layer? 3. Strictly speaking, JavaBeans do not contain a constructor and implement Serializable. Strictly speaking, a JavaBean *does* contain a construtctor (or even more than one), just like any other Java class. It's just that a real bean needs to have a no-arg constructor. The actual code that I uploaded to Rick includes a no-arg construtctor for EmployeeBean but omitted implementing Serializable or Externalizable. The bean also fails to act as an event source and it doesn't check for things like null values passed to either its construtctor or its set methods. Mark -Original Message- From: Rick Reumann [mailto:[EMAIL PROTECTED] Sent: Tuesday, July 15, 2003 11:44 PM To: Struts Users Mailing List Subject: [OT] Re: 4th Of July Struts Challenge... Kris... this was just awesome! Thanks. You da 'man:) On Tue, Jul 15,'03 (11:25 AM GMT-0400), Kris wrote: As it turns out, some of my ideas about a standard property of type Map versus a mapped property were a bit off. So, if you're still interested, here's something I hacked together. You'll notice I used a session scoped form so that Struts doesn't choke when it tries to populate the form. struts-config.xml: -- form-beans form-bean name=employeesForm type=org.apache.struts.action.DynaActionForm form-property name=employeesMap type=java.util.Map/ /form-bean /form-beans action-mappings action path=/employees/edit type=com.dotech.EditEmployeesAction name=employeesForm scope=session validate=false forward name=success path=/editEmployees.jsp/ /action action path=/employees/save type=org.apache.struts.actions.ForwardAction parameter=/viewEmployees.jsp name=employeesForm scope=session validate=false/ /action-mappings editEmployees.jsp: -- %@ taglib prefix=bean uri=http://jakarta.apache.org/struts/tags-bean; %%@ taglib prefix=c uri=http://java.sun.com/jstl/core; %%@ taglib prefix=html uri=http://jakarta.apache.org/struts/tags-html; % %-- dynamically get a handle to the form --% bean:struts id=mapping mapping=/employees/save/ c:set var=attribute value=${mapping.attribute}/ c:set var=scope value=${mapping.scope}/ c:choose c:when test=${scope eq 'request'} c:set var=form value=${requestScope[attribute]}/ /c:when c:otherwise c:set var=form value=${sessionScope[attribute]}/ /c:otherwise /c:choose html headtitleEdit Employees/title/head body html:form action=/employees/save table c:forEach var=entry items=${form.map.employeesMap} tr tdc:out value=${entry.key}//td td input type=text name=c:out value=employeesMap(${entry.key}).name/ value=c:out value=${entry.value.name}/ /td td input type=text name=c:out
RE: [OT] Re: 4th Of July Struts Challenge...
I have not found this in the spec, but I believe the no-argument constructor is available at anytime for a concrete class. This would be a good one to test -Original Message- From: Michael Duffy [mailto:[EMAIL PROTECTED] Sent: Wednesday, July 16, 2003 10:27 AM To: Struts Users Mailing List Subject: RE: [OT] Re: 4th Of July Struts Challenge... It's my understanding that you ONLY get the default if there are no other constructors written. The minute you write ANY constructor, you're on your own. If you still want a default ctor, you've gotta supply it. I'll be happy to learn something if this is incorrect. - MOD --- Mark Galbreath [EMAIL PROTECTED] wrote: The no-argument constructor is the default and does not have to be declared. You have a 2-arg constructor. As for JSTL (or any EL) acting like straight scripting, I've never had an argument with using scripting where appropriate. Pragmatism should be the rule of the day. Finally, I don't know why declaring DynaActionForm beans as Maps didn't work for me, but neither is it a big issue. I realize the constraints of declaring a variable as a concrete/abstract class vs. as an interface. Besides, I like what you've created. :-) -Original Message- From: Kris Schneider [mailto:[EMAIL PROTECTED] Sent: Wednesday, July 16, 2003 8:55 AM To: Struts Users Mailing List Subject: RE: [OT] Re: 4th Of July Struts Challenge... Quoting Mark Galbreath [EMAIL PROTECTED]: A few comments: 1. I got runtime errors when I declared a DynaActionForm bean of type Map; I had to declare it of type HashMap. Not sure what you're doing, but the example works as coded. If it matters, post some details and we'll see if something needs fixing. 2. You may be using JSTL, but it still looks like scripting to me. Fair enough. What's your recommended alternative to JSTL when using JSP for your view layer? 3. Strictly speaking, JavaBeans do not contain a constructor and implement Serializable. Strictly speaking, a JavaBean *does* contain a construtctor (or even more than one), just like any other Java class. It's just that a real bean needs to have a no-arg constructor. The actual code that I uploaded to Rick includes a no-arg construtctor for EmployeeBean but omitted implementing Serializable or Externalizable. The bean also fails to act as an event source and it doesn't check for things like null values passed to either its construtctor or its set methods. Mark -Original Message- From: Rick Reumann [mailto:[EMAIL PROTECTED] Sent: Tuesday, July 15, 2003 11:44 PM To: Struts Users Mailing List Subject: [OT] Re: 4th Of July Struts Challenge... Kris... this was just awesome! Thanks. You da 'man:) On Tue, Jul 15,'03 (11:25 AM GMT-0400), Kris wrote: As it turns out, some of my ideas about a standard property of type Map versus a mapped property were a bit off. So, if you're still interested, here's something I hacked together. You'll notice I used a session scoped form so that Struts doesn't choke when it tries to populate the form. struts-config.xml: -- form-beans form-bean name=employeesForm type=org.apache.struts.action.DynaActionForm form-property name=employeesMap type=java.util.Map/ /form-bean /form-beans action-mappings action path=/employees/edit type=com.dotech.EditEmployeesAction name=employeesForm scope=session validate=false forward name=success path=/editEmployees.jsp/ /action action path=/employees/save type=org.apache.struts.actions.ForwardAction parameter=/viewEmployees.jsp name=employeesForm scope=session validate=false/ /action-mappings editEmployees.jsp: -- %@ taglib prefix=bean uri=http://jakarta.apache.org/struts/tags-bean; %%@ taglib prefix=c uri=http://java.sun.com/jstl/core; %%@ taglib prefix=html uri=http://jakarta.apache.org/struts/tags-html; % %-- dynamically get a handle to the form --% bean:struts id=mapping mapping=/employees/save/ c:set var=attribute value=${mapping.attribute}/ c:set var=scope value=${mapping.scope}/ c:choose c:when test=${scope eq 'request'} c:set var=form value=${requestScope[attribute]}/ /c:when c:otherwise c:set var=form value=${sessionScope[attribute]}/ /c:otherwise /c:choose html headtitleEdit Employees/title/head body html:form action=/employees/save table c:forEach var=entry items=${form.map.employeesMap} tr tdc:out
RE: [OT] Re: 4th Of July Struts Challenge...
Quoting Michael Duffy [EMAIL PROTECTED]: It's my understanding that you ONLY get the default if there are no other constructors written. The minute you write ANY constructor, you're on your own. If you still want a default ctor, you've gotta supply it. I'll be happy to learn something if this is incorrect. - MOD That's correct. 8 snip 8 -- Kris Schneider mailto:[EMAIL PROTECTED] D.O.Tech http://www.dotech.com/ - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
RE: [OT] Re: 4th Of July Struts Challenge...
I do not believe this to be the case. Indeed Im 99% certain it is not the case. I suppose I should bang together a class to prove this, but it will be more fun to argue about it for a while yet ;-) -Original Message- From: Mark Galbreath [mailto:[EMAIL PROTECTED] Sent: Wednesday, 16 July 2003 22:30 To: 'Struts Users Mailing List' Subject: RE: [OT] Re: 4th Of July Struts Challenge... I have not found this in the spec, but I believe the no-argument constructor is available at anytime for a concrete class. This would be a good one to test -Original Message- From: Michael Duffy [mailto:[EMAIL PROTECTED] Sent: Wednesday, July 16, 2003 10:27 AM To: Struts Users Mailing List Subject: RE: [OT] Re: 4th Of July Struts Challenge... It's my understanding that you ONLY get the default if there are no other constructors written. The minute you write ANY constructor, you're on your own. If you still want a default ctor, you've gotta supply it. I'll be happy to learn something if this is incorrect. - MOD --- Mark Galbreath [EMAIL PROTECTED] wrote: The no-argument constructor is the default and does not have to be declared. You have a 2-arg constructor. As for JSTL (or any EL) acting like straight scripting, I've never had an argument with using scripting where appropriate. Pragmatism should be the rule of the day. Finally, I don't know why declaring DynaActionForm beans as Maps didn't work for me, but neither is it a big issue. I realize the constraints of declaring a variable as a concrete/abstract class vs. as an interface. Besides, I like what you've created. :-) -Original Message- From: Kris Schneider [mailto:[EMAIL PROTECTED] Sent: Wednesday, July 16, 2003 8:55 AM To: Struts Users Mailing List Subject: RE: [OT] Re: 4th Of July Struts Challenge... Quoting Mark Galbreath [EMAIL PROTECTED]: A few comments: 1. I got runtime errors when I declared a DynaActionForm bean of type Map; I had to declare it of type HashMap. Not sure what you're doing, but the example works as coded. If it matters, post some details and we'll see if something needs fixing. 2. You may be using JSTL, but it still looks like scripting to me. Fair enough. What's your recommended alternative to JSTL when using JSP for your view layer? 3. Strictly speaking, JavaBeans do not contain a constructor and implement Serializable. Strictly speaking, a JavaBean *does* contain a construtctor (or even more than one), just like any other Java class. It's just that a real bean needs to have a no-arg constructor. The actual code that I uploaded to Rick includes a no-arg construtctor for EmployeeBean but omitted implementing Serializable or Externalizable. The bean also fails to act as an event source and it doesn't check for things like null values passed to either its construtctor or its set methods. Mark -Original Message- From: Rick Reumann [mailto:[EMAIL PROTECTED] Sent: Tuesday, July 15, 2003 11:44 PM To: Struts Users Mailing List Subject: [OT] Re: 4th Of July Struts Challenge... Kris... this was just awesome! Thanks. You da 'man:) On Tue, Jul 15,'03 (11:25 AM GMT-0400), Kris wrote: As it turns out, some of my ideas about a standard property of type Map versus a mapped property were a bit off. So, if you're still interested, here's something I hacked together. You'll notice I used a session scoped form so that Struts doesn't choke when it tries to populate the form. struts-config.xml: -- form-beans form-bean name=employeesForm type=org.apache.struts.action.DynaActionForm form-property name=employeesMap type=java.util.Map/ /form-bean /form-beans action-mappings action path=/employees/edit type=com.dotech.EditEmployeesAction name=employeesForm scope=session validate=false forward name=success path=/editEmployees.jsp/ /action action path=/employees/save type=org.apache.struts.actions.ForwardAction parameter=/viewEmployees.jsp name=employeesForm scope=session validate=false/ /action-mappings editEmployees.jsp: -- %@ taglib prefix=bean uri=http://jakarta.apache.org/struts/tags-bean; %%@ taglib prefix=c uri=http://java.sun.com/jstl/core; %%@ taglib prefix=html uri=http://jakarta.apache.org/struts/tags-html; % %-- dynamically get a handle to the form --% bean:struts id=mapping mapping=/employees/save/ c:set var=attribute value=${mapping.attribute}/ c:set var=scope value=${mapping.scope}/ c:choose c:when test=${scope eq 'request'} c:set var=form value=${requestScope[attribute]}/ /c:when c:otherwise
Re[2]: [OT] Re: 4th Of July Struts Challenge...
Hello Mark, *** MG I have not found this but I have: If the source code for a class contains no declared constructors, the Java compiler automatically supplies a constructor with no parameters. Adding one or more constructor declarations to the source code of such a class will prevent this default constructor from being supplied automatically, effectively deleting a constructor, unless one of the new constructors also has no parameters, thus replacing the default constructor. JLS, page 267 MG in the spec, but I believe the no-argument constructor MG is available at anytime for a concrete class. This would be a good one to MG test MG -Original Message- MG From: Michael Duffy [mailto:[EMAIL PROTECTED] MG Sent: Wednesday, July 16, 2003 10:27 AM MG To: Struts Users Mailing List MG Subject: RE: [OT] Re: 4th Of July Struts Challenge... MG It's my understanding that you ONLY get the default if MG there are no other constructors written. The minute MG you write ANY constructor, you're on your own. If you MG still want a default ctor, you've gotta supply it. MG I'll be happy to learn something if this is incorrect. MG - MOD MG --- Mark Galbreath [EMAIL PROTECTED] wrote: The no-argument constructor is the default and does not have to be declared. You have a 2-arg constructor. As for JSTL (or any EL) acting like straight scripting, I've never had an argument with using scripting where appropriate. Pragmatism should be the rule of the day. Finally, I don't know why declaring DynaActionForm beans as Maps didn't work for me, but neither is it a big issue. I realize the constraints of declaring a variable as a concrete/abstract class vs. as an interface. Besides, I like what you've created. :-) -Original Message- From: Kris Schneider [mailto:[EMAIL PROTECTED] Sent: Wednesday, July 16, 2003 8:55 AM To: Struts Users Mailing List Subject: RE: [OT] Re: 4th Of July Struts Challenge... Quoting Mark Galbreath [EMAIL PROTECTED]: A few comments: 1. I got runtime errors when I declared a DynaActionForm bean of type Map; I had to declare it of type HashMap. Not sure what you're doing, but the example works as coded. If it matters, post some details and we'll see if something needs fixing. 2. You may be using JSTL, but it still looks like scripting to me. Fair enough. What's your recommended alternative to JSTL when using JSP for your view layer? 3. Strictly speaking, JavaBeans do not contain a constructor and implement Serializable. Strictly speaking, a JavaBean *does* contain a construtctor (or even more than one), just like any other Java class. It's just that a real bean needs to have a no-arg constructor. The actual code that I uploaded to Rick includes a no-arg construtctor for EmployeeBean but omitted implementing Serializable or Externalizable. The bean also fails to act as an event source and it doesn't check for things like null values passed to either its construtctor or its set methods. Mark -Original Message- From: Rick Reumann [mailto:[EMAIL PROTECTED] Sent: Tuesday, July 15, 2003 11:44 PM To: Struts Users Mailing List Subject: [OT] Re: 4th Of July Struts Challenge... Kris... this was just awesome! Thanks. You da 'man:) On Tue, Jul 15,'03 (11:25 AM GMT-0400), Kris wrote: As it turns out, some of my ideas about a standard property of type Map versus a mapped property were a bit off. So, if you're still interested, here's something I hacked together. You'll notice I used a session scoped form so that Struts doesn't choke when it tries to populate the form. struts-config.xml: -- form-beans form-bean name=employeesForm type=org.apache.struts.action.DynaActionForm form-property name=employeesMap type=java.util.Map/ /form-bean /form-beans action-mappings action path=/employees/edit type=com.dotech.EditEmployeesAction name=employeesForm scope=session validate=false forward name=success path=/editEmployees.jsp/ /action action path=/employees/save type=org.apache.struts.actions.ForwardAction parameter=/viewEmployees.jsp name=employeesForm scope=session validate=false/ /action-mappings editEmployees.jsp: -- %@ taglib prefix=bean uri=http://jakarta.apache.org/struts/tags-bean; %%@ taglib prefix=c uri=http://java.sun.com/jstl/core; %%@ taglib prefix=html uri=http://jakarta.apache.org/struts/tags-html; % %-- dynamically get a handle to the form --% bean:struts id=mapping
RE: Re[2]: [OT] Re: 4th Of July Struts Challenge...
That analysis of constructors is correct. Regarding the question about JavaBeans and constructors, the document How to be a Good Bean from Sun's website (http://java.sun.com/products/javabeans/docs/goodbean.pdf) indicates that it is good practice to provide a zero-argument constructor for a JavaBean. This is so that an instance of the bean can be created using Beans.instantiate(). -Original Message- From: Dirk Markert [mailto:[EMAIL PROTECTED] Sent: Wednesday, July 16, 2003 11:01 AM To: Struts Users Mailing List Subject: Re[2]: [OT] Re: 4th Of July Struts Challenge... Hello Mark, *** MG I have not found this but I have: If the source code for a class contains no declared constructors, the Java compiler automatically supplies a constructor with no parameters. Adding one or more constructor declarations to the source code of such a class will prevent this default constructor from being supplied automatically, effectively deleting a constructor, unless one of the new constructors also has no parameters, thus replacing the default constructor. JLS, page 267 MG in the spec, but I believe the no-argument constructor MG is available at anytime for a concrete class. This would be a good one to MG test MG -Original Message- MG From: Michael Duffy [mailto:[EMAIL PROTECTED] MG Sent: Wednesday, July 16, 2003 10:27 AM MG To: Struts Users Mailing List MG Subject: RE: [OT] Re: 4th Of July Struts Challenge... MG It's my understanding that you ONLY get the default if MG there are no other constructors written. The minute MG you write ANY constructor, you're on your own. If you MG still want a default ctor, you've gotta supply it. MG I'll be happy to learn something if this is incorrect. MG - MOD MG --- Mark Galbreath [EMAIL PROTECTED] wrote: The no-argument constructor is the default and does not have to be declared. You have a 2-arg constructor. As for JSTL (or any EL) acting like straight scripting, I've never had an argument with using scripting where appropriate. Pragmatism should be the rule of the day. Finally, I don't know why declaring DynaActionForm beans as Maps didn't work for me, but neither is it a big issue. I realize the constraints of declaring a variable as a concrete/abstract class vs. as an interface. Besides, I like what you've created. :-) -Original Message- From: Kris Schneider [mailto:[EMAIL PROTECTED] Sent: Wednesday, July 16, 2003 8:55 AM To: Struts Users Mailing List Subject: RE: [OT] Re: 4th Of July Struts Challenge... Quoting Mark Galbreath [EMAIL PROTECTED]: A few comments: 1. I got runtime errors when I declared a DynaActionForm bean of type Map; I had to declare it of type HashMap. Not sure what you're doing, but the example works as coded. If it matters, post some details and we'll see if something needs fixing. 2. You may be using JSTL, but it still looks like scripting to me. Fair enough. What's your recommended alternative to JSTL when using JSP for your view layer? 3. Strictly speaking, JavaBeans do not contain a constructor and implement Serializable. Strictly speaking, a JavaBean *does* contain a construtctor (or even more than one), just like any other Java class. It's just that a real bean needs to have a no-arg constructor. The actual code that I uploaded to Rick includes a no-arg construtctor for EmployeeBean but omitted implementing Serializable or Externalizable. The bean also fails to act as an event source and it doesn't check for things like null values passed to either its construtctor or its set methods. Mark -Original Message- From: Rick Reumann [mailto:[EMAIL PROTECTED] Sent: Tuesday, July 15, 2003 11:44 PM To: Struts Users Mailing List Subject: [OT] Re: 4th Of July Struts Challenge... Kris... this was just awesome! Thanks. You da 'man:) On Tue, Jul 15,'03 (11:25 AM GMT-0400), Kris wrote: As it turns out, some of my ideas about a standard property of type Map versus a mapped property were a bit off. So, if you're still interested, here's something I hacked together. You'll notice I used a session scoped form so that Struts doesn't choke when it tries to populate the form. struts-config.xml: -- form-beans form-bean name=employeesForm type=org.apache.struts.action.DynaActionForm form-property name=employeesMap type=java.util.Map/ /form-bean /form-beans action-mappings action path=/employees/edit type=com.dotech.EditEmployeesAction name=employeesForm scope=session validate=false forward name=success path=/editEmployees.jsp/ /action action path=/employees/save
RE: [OT] Re: 4th Of July Struts Challenge...
The no-argument constructor is available from default ONLY if you do not have another constructor, Mark. If you have another constructor with an argument, then the no-argument constructor is not there by default and must be coded. There is no need to test this. It is that way. I would always make a class serializable in this situation. At 10:29 AM 7/16/03 -0400, you wrote: I have not found this in the spec, but I believe the no-argument constructor is available at anytime for a concrete class. This would be a good one to test -Original Message- From: Michael Duffy [mailto:[EMAIL PROTECTED] Sent: Wednesday, July 16, 2003 10:27 AM To: Struts Users Mailing List Subject: RE: [OT] Re: 4th Of July Struts Challenge... It's my understanding that you ONLY get the default if there are no other constructors written. The minute you write ANY constructor, you're on your own. If you still want a default ctor, you've gotta supply it. I'll be happy to learn something if this is incorrect. - MOD --- Mark Galbreath [EMAIL PROTECTED] wrote: The no-argument constructor is the default and does not have to be declared. You have a 2-arg constructor. As for JSTL (or any EL) acting like straight scripting, I've never had an argument with using scripting where appropriate. Pragmatism should be the rule of the day. Finally, I don't know why declaring DynaActionForm beans as Maps didn't work for me, but neither is it a big issue. I realize the constraints of declaring a variable as a concrete/abstract class vs. as an interface. Besides, I like what you've created. :-) -Original Message- From: Kris Schneider [mailto:[EMAIL PROTECTED] Sent: Wednesday, July 16, 2003 8:55 AM To: Struts Users Mailing List Subject: RE: [OT] Re: 4th Of July Struts Challenge... Quoting Mark Galbreath [EMAIL PROTECTED]: A few comments: 1. I got runtime errors when I declared a DynaActionForm bean of type Map; I had to declare it of type HashMap. Not sure what you're doing, but the example works as coded. If it matters, post some details and we'll see if something needs fixing. 2. You may be using JSTL, but it still looks like scripting to me. Fair enough. What's your recommended alternative to JSTL when using JSP for your view layer? 3. Strictly speaking, JavaBeans do not contain a constructor and implement Serializable. Strictly speaking, a JavaBean *does* contain a construtctor (or even more than one), just like any other Java class. It's just that a real bean needs to have a no-arg constructor. The actual code that I uploaded to Rick includes a no-arg construtctor for EmployeeBean but omitted implementing Serializable or Externalizable. The bean also fails to act as an event source and it doesn't check for things like null values passed to either its construtctor or its set methods. Mark -Original Message- From: Rick Reumann [mailto:[EMAIL PROTECTED] Sent: Tuesday, July 15, 2003 11:44 PM To: Struts Users Mailing List Subject: [OT] Re: 4th Of July Struts Challenge... Kris... this was just awesome! Thanks. You da 'man:) On Tue, Jul 15,'03 (11:25 AM GMT-0400), Kris wrote: As it turns out, some of my ideas about a standard property of type Map versus a mapped property were a bit off. So, if you're still interested, here's something I hacked together. You'll notice I used a session scoped form so that Struts doesn't choke when it tries to populate the form. struts-config.xml: -- form-beans form-bean name=employeesForm type=org.apache.struts.action.DynaActionForm form-property name=employeesMap type=java.util.Map/ /form-bean /form-beans action-mappings action path=/employees/edit type=com.dotech.EditEmployeesAction name=employeesForm scope=session validate=false forward name=success path=/editEmployees.jsp/ /action action path=/employees/save type=org.apache.struts.actions.ForwardAction parameter=/viewEmployees.jsp name=employeesForm scope=session validate=false/ /action-mappings editEmployees.jsp: -- %@ taglib prefix=bean uri=http://jakarta.apache.org/struts/tags-bean; %%@ taglib prefix=c uri=http://java.sun.com/jstl/core; %%@ taglib prefix=html uri=http://jakarta.apache.org/struts/tags-html; % %-- dynamically get a handle to the form --% bean:struts id=mapping mapping=/employees/save/ c:set var=attribute value=${mapping.attribute}/ c:set var=scope value=${mapping.scope}/ c:choose c:when test=${scope eq 'request'} c:set var=form value=${requestScope[attribute]}/ /c:when c:otherwise c:set var=form
RE: Re[2]: [OT] Re: 4th Of July Struts Challenge...
On Wed, 16 Jul 2003, Larry Zappeterrini wrote: Date: Wed, 16 Jul 2003 11:08:46 -0400 From: Larry Zappeterrini [EMAIL PROTECTED] Reply-To: Struts Users Mailing List [EMAIL PROTECTED] To: 'Struts Users Mailing List' [EMAIL PROTECTED] Subject: RE: Re[2]: [OT] Re: 4th Of July Struts Challenge... That analysis of constructors is correct. Regarding the question about JavaBeans and constructors, the document How to be a Good Bean from Sun's website (http://java.sun.com/products/javabeans/docs/goodbean.pdf) indicates that it is good practice to provide a zero-argument constructor for a JavaBean. This is so that an instance of the bean can be created using Beans.instantiate(). Indeed, Struts itself relies on this to instantiate things like Action and ActionForm beans dynamically. Craig - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
[OT] Re: 4th Of July Struts Challenge...
Kris... this was just awesome! Thanks. You da 'man:) On Tue, Jul 15,'03 (11:25 AM GMT-0400), Kris wrote: As it turns out, some of my ideas about a standard property of type Map versus a mapped property were a bit off. So, if you're still interested, here's something I hacked together. You'll notice I used a session scoped form so that Struts doesn't choke when it tries to populate the form. struts-config.xml: -- form-beans form-bean name=employeesForm type=org.apache.struts.action.DynaActionForm form-property name=employeesMap type=java.util.Map/ /form-bean /form-beans action-mappings action path=/employees/edit type=com.dotech.EditEmployeesAction name=employeesForm scope=session validate=false forward name=success path=/editEmployees.jsp/ /action action path=/employees/save type=org.apache.struts.actions.ForwardAction parameter=/viewEmployees.jsp name=employeesForm scope=session validate=false/ /action-mappings editEmployees.jsp: -- %@ taglib prefix=bean uri=http://jakarta.apache.org/struts/tags-bean; %%@ taglib prefix=curi=http://java.sun.com/jstl/core; %%@ taglib prefix=html uri=http://jakarta.apache.org/struts/tags-html; % %-- dynamically get a handle to the form --% bean:struts id=mapping mapping=/employees/save/ c:set var=attribute value=${mapping.attribute}/ c:set var=scope value=${mapping.scope}/ c:choose c:when test=${scope eq 'request'} c:set var=form value=${requestScope[attribute]}/ /c:when c:otherwise c:set var=form value=${sessionScope[attribute]}/ /c:otherwise /c:choose html headtitleEdit Employees/title/head body html:form action=/employees/save table c:forEach var=entry items=${form.map.employeesMap} tr tdc:out value=${entry.key}//td td input type=text name=c:out value=employeesMap(${entry.key}).name/ value=c:out value=${entry.value.name}/ /td td input type=text name=c:out value=employeesMap(${entry.key}).age/ value=c:out value=${entry.value.age}/ /td /tr /c:forEach tr td align=center colspan=3html:submit//td /tr /table /html:form /body /html EmployeeBean.java: -- package com.dotech; public class EmployeeBean { private String name; private String age; public EmployeeBean(String name, String age) { this.name = name; this.age = age; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public String getAge() { return this.age; } public void setAge(String age) { this.age = age; } } EditEmployeesAction.java: - package com.dotech; import java.util.*; import javax.servlet.http.*; import org.apache.commons.beanutils.*; import org.apache.struts.action.*; public class EditEmployeesAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { Map empMap = new HashMap(); empMap.put(, new EmployeeBean(John Doe, 33)); empMap.put(, new EmployeeBean(Loser Boy, 22)); PropertyUtils.setProperty(form, employeesMap, empMap); return mapping.findForward(success); } } viewEmployees.jsp: -- %@ taglib prefix=bean uri=http://jakarta.apache.org/struts/tags-bean; %%@ taglib prefix=curi=http://java.sun.com/jstl/core; % %-- dynamically get a handle to the form --% bean:struts id=mapping mapping=/employees/save/ c:set var=attribute value=${mapping.attribute}/ c:set var=scope value=${mapping.scope}/ c:choose c:when test=${scope eq 'request'} c:set var=form value=${requestScope[attribute]}/ /c:when c:otherwise c:set var=form value=${sessionScope[attribute]}/ /c:otherwise /c:choose html headtitleView Employees/title/head body table c:forEach var=entry items=${form.map.employeesMap} tr tdc:out value=${entry.key}//td tdc:out value=${entry.value.name}//td tdc:out value=${entry.value.age}//td /tr /c:forEach