You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@velocity.apache.org by Nathan Bubna <nb...@gmail.com> on 2008/09/04 19:19:47 UTC

Re: Struts2 & Velocity Too

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 <cy...@hotmail.com> 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 <cy...@hotmail.com> 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: user-unsubscribe@velocity.apache.org
>>
>>> For additional commands, e-mail: user-help@velocity.apache.org
>>>
>>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: user-unsubscribe@velocity.apache.org
>> For additional commands, e-mail: user-help@velocity.apache.org
>>
>>
>>
>
>
>
> --
> 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: user-unsubscribe@velocity.apache.org
> For additional commands, e-mail: user-help@velocity.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@velocity.apache.org
For additional commands, e-mail: user-help@velocity.apache.org


[FIXED] Struts2 & Velocity Tool 1.4 - deprecated constructor ChainedContext

Posted by flavien_b <fl...@laposte.net>.
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 <cy...@hotmail.com> 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 <cy...@hotmail.com> 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: user-unsubscribe@velocity.apache.org
>>>
>>>> For additional commands, e-mail: user-help@velocity.apache.org
>>>>
>>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: user-unsubscribe@velocity.apache.org
>>> For additional commands, e-mail: user-help@velocity.apache.org
>>>
>>>
>>>
>>
>>
>>
>> --
>> 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: user-unsubscribe@velocity.apache.org
>> For additional commands, e-mail: user-help@velocity.apache.org
>>
>>
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@velocity.apache.org
> For additional commands, e-mail: user-help@velocity.apache.org
> 
> 
> 

-- 
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: user-unsubscribe@velocity.apache.org
For additional commands, e-mail: user-help@velocity.apache.org