You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@struts.apache.org by "Lukasz Lenart (JIRA)" <ji...@apache.org> on 2013/10/23 07:29:45 UTC
[jira] [Updated] (WW-4131) RestActionProxyFactory is handling all
requests with PrefixBasedActionMapper
[ https://issues.apache.org/jira/browse/WW-4131?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Lukasz Lenart updated WW-4131:
------------------------------
Description:
Using the following configuration:
{code:xml}
<constant name="struts.mapper.class" value="org.apache.struts2.dispatcher.mapper.PrefixBasedActionMapper"/>
<constant name="struts.mapper.prefixMapping" value=":rest,/ajax:struts,/login:struts"/>
{code}
Is expected that when I request the following url http://xxxxxxxx.com/ajax/anyThingHere, struts action proxy should handle this call. But instead, RestActionProxyFactory is handling this call.
But the RestActionProxyFactory class has a if, and every time the namespace attribute is injected with "/ajax" value. So the condition always is redirected to the rest plugin handler and not to the struts default.
Here is my ActionProxyFactory implementation:
{code:java}
public class CustomActionProxyFactory extends RestActionProxyFactory {
@Override
public ActionProxy createActionProxy(String namespace, String actionName, String methodName, Map<String, Object> extraContext, boolean executeResult, boolean cleanupContext) {
RestActionProxyFactory p = new RestActionProxyFactory();
p.setContainer(container);
if ("/ajax".equals(namespace)) {
p.setNamespace("/idealogic");
}
return p.createActionProxy(namespace, actionName, methodName, extraContext, executeResult, cleanupContext);
}
}
{code}
By some reason, it fixed the origin behaviour.
The begin of this issue was that <s:action> tag was rendering the action result, even with executeResult = false, which is the default value.
Another observation was that, changing the flush attribute value, the result is rendered in different parts of the html.
was:
Using the following configuration:
{noformat}
<constant name="struts.mapper.class" value="org.apache.struts2.dispatcher.mapper.PrefixBasedActionMapper"/>
<constant name="struts.mapper.prefixMapping" value=":rest,/ajax:struts,/login:struts"/>
{noformat}
Is expected that when I request the following url http://xxxxxxxx.com/ajax/anyThingHere, struts action proxy should handle this call. But instead, RestActionProxyFactory is handling this call.
But the RestActionProxyFactory class has a if, and every time the namespace attribute is injected with "/ajax" value. So the condition always is redirected to the rest plugin handler and not to the struts default.
Here is my ActionProxyFactory implementation:
{noformat}
public class CustomActionProxyFactory extends RestActionProxyFactory {
@Override
public ActionProxy createActionProxy(String namespace, String actionName, String methodName, Map<String, Object> extraContext, boolean executeResult, boolean cleanupContext) {
RestActionProxyFactory p = new RestActionProxyFactory();
p.setContainer(container);
if ("/ajax".equals(namespace)) {
p.setNamespace("/idealogic");
}
return p.createActionProxy(namespace, actionName, methodName, extraContext, executeResult, cleanupContext);
}
}
{noformat}
By some reason, it fixed the origin behaviour.
The begin of this issue was that <s:action> tag was rendering the action result, even with executeResult = false, which is the default value.
Another observation was that, changing the flush attribute value, the result is rendered in different parts of the html.
> RestActionProxyFactory is handling all requests with PrefixBasedActionMapper
> ----------------------------------------------------------------------------
>
> Key: WW-4131
> URL: https://issues.apache.org/jira/browse/WW-4131
> Project: Struts 2
> Issue Type: Bug
> Components: Plugin - REST
> Affects Versions: 2.3.12, 2.3.14, 2.3.15
> Reporter: Felipe Lorenz
> Priority: Minor
> Fix For: 2.3.16
>
>
> Using the following configuration:
> {code:xml}
> <constant name="struts.mapper.class" value="org.apache.struts2.dispatcher.mapper.PrefixBasedActionMapper"/>
> <constant name="struts.mapper.prefixMapping" value=":rest,/ajax:struts,/login:struts"/>
> {code}
> Is expected that when I request the following url http://xxxxxxxx.com/ajax/anyThingHere, struts action proxy should handle this call. But instead, RestActionProxyFactory is handling this call.
> But the RestActionProxyFactory class has a if, and every time the namespace attribute is injected with "/ajax" value. So the condition always is redirected to the rest plugin handler and not to the struts default.
> Here is my ActionProxyFactory implementation:
> {code:java}
> public class CustomActionProxyFactory extends RestActionProxyFactory {
> @Override
> public ActionProxy createActionProxy(String namespace, String actionName, String methodName, Map<String, Object> extraContext, boolean executeResult, boolean cleanupContext) {
> RestActionProxyFactory p = new RestActionProxyFactory();
> p.setContainer(container);
> if ("/ajax".equals(namespace)) {
> p.setNamespace("/idealogic");
> }
> return p.createActionProxy(namespace, actionName, methodName, extraContext, executeResult, cleanupContext);
> }
> }
> {code}
> By some reason, it fixed the origin behaviour.
> The begin of this issue was that <s:action> tag was rendering the action result, even with executeResult = false, which is the default value.
> Another observation was that, changing the flush attribute value, the result is rendered in different parts of the html.
--
This message was sent by Atlassian JIRA
(v6.1#6144)