Hi,
I managed to get it working with velocity-tools-1.4 :
I subclassed the VelocityManager class, overridden the createContextMethod,
and replaced the deprecated constructor by the new one :
MyVelocityManager.java :
--------------------------------------------------------------------------------------
import java.util.Iterator;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.util.VelocityStrutsUtil;
import org.apache.struts2.views.jsp.ui.OgnlTool;
import org.apache.struts2.views.util.ContextUtil;
import org.apache.struts2.views.velocity.StrutsVelocityContext;
import org.apache.struts2.views.velocity.VelocityManager;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.context.Context;
import org.apache.velocity.tools.view.context.ChainedContext;
import com.opensymphony.xwork2.util.ValueStack;
public class MyVelocityManager extends VelocityManager
{
private static final Logger LOG =
Logger.getLogger(MyVelocityManager.class);
public Context createContext(ValueStack stack, HttpServletRequest
req,
HttpServletResponse res) {
VelocityContext[] chainedContexts = prepareChainedContexts(req,
res, stack.getContext());
StrutsVelocityContext context = new
StrutsVelocityContext(chainedContexts, stack);
Map standardMap = ContextUtil.getStandardContext(stack, req,
res);
for (Iterator iterator = standardMap.entrySet().iterator();
iterator.hasNext();) {
Map.Entry entry = (Map.Entry) iterator.next();
context.put((String) entry.getKey(), entry.getValue());
}
context.put(STRUTS, new VelocityStrutsUtil(getVelocityEngine(),
context, stack, req, res));
ServletContext ctx = null;
try {
ctx = ServletActionContext.getServletContext();
} catch (NullPointerException npe) {
// in case this was used outside the lifecycle of struts
servlet
LOG.debug("internal toolbox context ignored");
}
if (toolboxManager != null && ctx != null) {
// here is the new constructor :
ChainedContext chained = new
ChainedContext(getVelocityEngine(), req, res, ctx);
chained.setToolbox(toolboxManager.getToolbox(chained));
return chained;
} else {
return context;
}
}
}
--------------------------------------------------------------------------------------
Now just add this line :
struts.xml :
--------------------------------------------------------------------------------------
<constant name="struts.velocity.manager.classname"
value="your.package.MyVelocityManager" />
--------------------------------------------------------------------------------------
and struts will use your new manager instead of the build in one.
Tested with velocity-tools-1.4 only, it seems to work fine.
Hope this help ;-)
Nathan Bubna wrote:
>
> Yeah, the Struts people are apparently not keeping up with changes. :(
>
> That particular constructor was deprecated even in VelocityTools 1.2.
> It looks like they are still imagining that Tools 1.1 is standard.
> It's been a quite a few years since that was true. Thanks for filing
> the bug with them.
>
> On Thu, Sep 4, 2008 at 7:21 AM, emri <[EMAIL PROTECTED]> wrote:
>>
>> I managed to get it working using velocity tools 1.2. This bug is coming
>> from
>> the org.apache.struts2.views.velocity.VelocityManager class that must not
>> be
>> up to date with velocity changes. I'm heading toward struts forums to try
>> solve this.
>>
>> (Continued here : https://issues.apache.org/struts/browse/WW-2796 )
>>
>> Thank for your help :)
>>
>>
>> Nathan Bubna wrote:
>>>
>>> followup questions inline below...
>>>
>>> On Mon, Sep 1, 2008 at 2:54 AM, emri <[EMAIL PROTECTED]> wrote:
>>>>
>>>> Hello,
>>>>
>>>> I can't get generic-tools working in my Struts2 Config, objects are not
>>>> instanciate and are render as String in templates. I don't find any
>>>> information, samples to get this working, it seems so simple to read
>>>> :),
>>>> but
>>>> impossible to make it work for me :(
>>>>
>>>> Can you point me my error, a link, an hint, an advice, anything :D ?
>>>>
>>>> Thanks !
>>>>
>>>>
>>>> I use Struts 2, Velocity 1.5, Velocity Tools 1.4
>>>>
>>>> My configs files are:
>>>>
>>>> Toolbox.xml
>>>> --------------
>>>> <toolbox>
>>>> <tool>
>>>> <key>date</key>
>>>>
>>>> <class>org.apache.velocity.tools.generic.DateTool</class>
>>>> <scope>request</scope>
>>>> </tool>
>>>> <tool>
>>>> <key>alternator</key>
>>>>
>>>> <class>org.apache.velocity.tools.generic.AlternatorTool</class>
>>>> <scope>application</scope>
>>>> </tool>
>>>> <tool>
>>>> <key>list</key>
>>>>
>>>> <class>org.apache.velocity.tools.generic.ListTool</class>
>>>> <scope>application</scope>
>>>> </tool>
>>>> </toolbox>
>>>> --------------
>>>>
>>>>
>>>> Web.xml
>>>> --------------
>>>> <servlet>
>>>> <servlet-name>velocity</servlet-name>
>>>>
>>>> <servlet-class>org.apache.velocity.tools.view.servlet.VelocityViewServlet</servlet-class>
>>>> <init-param>
>>>>
>>>> <param-name>org.apache.velocity.toolbox</param-name>
>>>> <param-value>/WEB-INF/toolbox.xml</param-value>
>>>> </init-param>
>>>> <init-param>
>>>> <param-name>org.apache.velocity.properties</param-name>
>>>> <param-value>/WEB-INF/velocity.properties</param-value>
>>>> </init-param>
>>>> <load-on-startup>10</load-on-startup>
>>>> </servlet>
>>>
>>>
>>> are you sure that it is the VelocityLayoutServlet that is doing the
>>> processing of your templates? I believe Struts 2 has their own way
>>> of supporting Velocity that doesn't use the VelocityViewServlet.
>>>
>>>> velocity.properties
>>>> --------------
>>>>
>>>> runtime.log = velocity.log
>>>>
>>>> runtime.log.error.stacktrace = false
>>>> runtime.log.warn.stacktrace = false
>>>> runtime.log.info.stacktrace = false
>>>> runtime.log.invalid.reference = true
>>>> runtime.log.logsystem.class =
>>>> org.apache.velocity.runtime.log.Log4JLogSystem
>>>> runtime.log.logsystem.log4j.pattern=%d - %m%n
>>>>
>>>>
>>>> input.encoding=ISO-8859-1
>>>> output.encoding=ISO-8859-1
>>>>
>>>>
>>>> directive.foreach.counter.name = velocityCount
>>>> directive.foreach.counter.initial.value = 1
>>>>
>>>> directive.include.output.errormsg.start = <!-- include error :
>>>> directive.include.output.errormsg.end = see error log -->
>>>>
>>>> directive.parse.max.depth = 10
>>>>
>>>>
>>>> resource.loader = file
>>>>
>>>> file.resource.loader.description = Velocity File Resource Loader
>>>> file.resource.loader.class =
>>>> org.apache.velocity.runtime.resource.loader.FileResourceLoader
>>>> file.resource.loader.path =
>>>> /home/jboss/server/webServer/deploy/webServer.war/views/HTML
>>>> file.resource.loader.cache = false
>>>> file.resource.loader.modificationCheckInterval = 2
>>>
>>> i'm fairly skeptical that this works. you can't typically address
>>> files within a war like this. you could just use the default
>>> "webapp" resource loader that the VelocityViewServlet provides. i
>>> think you just need to remove the file.resource.loader properties
>>> above and add this one:
>>>
>>> webapp.resource.loader.path = /view/HTML
>>>
>>>>
>>>> velocimacro.library = pz_const.vm, pz_libs.vm
>>>>
>>>> velocimacro.permissions.allow.inline = true
>>>> velocimacro.permissions.allow.inline.to.replace.global = false
>>>> velocimacro.permissions.allow.inline.local.scope = false
>>>>
>>>> velocimacro.context.localscope = false
>>>> ---------------------
>>>> --
>>>> View this message in context:
>>>> http://www.nabble.com/Struts2---Velocity-Tools-tp19251905p19251905.html
>>>> Sent from the Velocity - User mailing list archive at Nabble.com.
>>>>
>>>>
>>>> ---------------------------------------------------------------------
>>>> 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]
>>>
>>>
>>>
>>
>>
>>
>> --
>> View this message in context:
>> http://www.nabble.com/Struts2---Velocity-Tools-tp19251905p19309167.html
>> Sent from the Velocity - User mailing list archive at Nabble.com.
>>
>>
>> ---------------------------------------------------------------------
>> 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]
>
>
>
--
View this message in context:
http://www.nabble.com/Struts2---Velocity-Tools-tp19251905p19432878.html
Sent from the Velocity - User mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]