Ideally i'd have a template directory under WEB-INF where numb-nuts dreamweaver types can edit email templates and i particularly like the expression syntax which is like jsp2. So i was trying to think of a way of using just that.
Velocity would be a really tidy way of doing things if the VelocityEngine class had a getTemplate method that takes in a file rather than just a string. At the moment I've a velocity servlet thats really only there to get around this problem.
But as things are its not that bad i've have just preferred not having to have a velocity servlet running just to find the where abouts of the template.
Using jsp even better as everythings already there, just how to drill to what i need. RequestDispatcher could be an option request the file get its context and then stuff the map in there, but could be tree-barking or/and smoking too much crack.
On 2 Mar 2004, at 12:59, Niall Pemberton wrote:
Mark,
I'd like to know how to do what you're but, unless someone else knows, how
about a different approach:
You could have a "store" tag which gets the body of a tag and stores it
somewhere (in the request or session or in a bean in the request or session)
and then forwards to an email action which then gets the stored content and
sends an email. Something like:
------EmailTemplate.jsp----- <custom:store name="myForm" property="emailContent" scope="session"> ------ format your email here ----- </custom:store> <logic:forward name="emailForward"/>
------- StoreTag.java---------
package lib.framework.taglib; import javax.servlet.jsp.tagext.BodyTagSupport; import javax.servlet.jsp.JspException; import org.apache.struts.util.RequestUtils; import org.apache.commons.beanutils.BeanUtils; /** * @author Niall Pemberton * @version 1.0.0 */ public class StoreTag extends BodyTagSupport {
protected String name = null; protected String property = null; protected String scope = null;
public StoreTag() {
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setProperty(String property) {
this.property = property;
}
public String getProperty() {
return property;
}
public void setScope(String scope) {
this.scope = scope;
}
public String getScope() {
return scope;
}
public int doAfterBody() throws JspException {
org.apache.struts.action.RequestProcessor ccc;
String value = null;
if (bodyContent != null) {
value = bodyContent.getString().trim();
}
if (property == null) {
pageContext.setAttribute(name, value, RequestUtils.getScope(scope));
} else {
// find the bean
Object bean = RequestUtils.lookup(pageContext, name, scope);
if (bean == null)
throw new JspException("Cannot find bean '"+name+"' in scope '"+scope+"'");
try {
BeanUtils.setProperty(bean, property, value);
}
catch (Exception ex) {
throw new JspException("Error setting property '"+property+"' on bean
'"+name+"' in scope '"+scope+"': "+ex);
}
}
return (SKIP_BODY);
}
public void release() {
name = null;
property = null;
scope = null;
}
}
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]