Dale Newfield wrote:
Lets see if I can come up with an off-the-cuff example:
Ok, I see what you're doing now.
Because I still can't find people that are friends with both joe and amy:
http://localhost:8080/social-networking-app-de-jur/users/friendsOf/joe/friendsOf/amy.html
because one constraint will overwrite the next of the same type.
And I don't think this is really what the rest plugin does, either.
(Am I wrong?)
Yeah, I'm certain no mapping supports params like the "friendOf' and
"friendOf" example at the moment. The NamedVariablePatternMatcher is
based on fixed patterns:
eg.
@Namespace("users/{relationshipA}/{usernameA}/{relationshipB}/{usernameB}")
In order to prevent a multitude of urls, I guess I could be careful
and alphabetize the constraints when constructing urls (alphabetizing
values when constraints are multiply present. So I would need to
detect that this is incorrect:
http://localhost:8080/social-networking-app-de-jur/users/friendsOf/joe/friendsOf/amy.html
and redirect to:
http://localhost:8080/social-networking-app-de-jur/users/friendsOf/amy/friendsOf/joe.html
before returning a result.
So now that I better understand how to most cleanly describe the urls
to request information from my system, how do I go about implementing
that mapping? From what I understand of the various rest tools we've
got, this isn't the way any of them work. Should I just send all
"/widgets/*" to a single action that does it's own URL parsing?
I think this is an argument for a custom action mapper that supports
your expressions. It's up to the mapper to parse the URL to extract the
namespace, action and params. The mappers seem fairly straight-forward.
Actually, I don't think any of the existing mappers can send
"/widgets/*" to your action because I think they would confuse the paths
training widgets with the namespace or action name (except perhaps when
it fails it will fallback to an in the default namespace)..
I'd start by looking at the parseNameAndNamespace method of
http://svn.apache.org/repos/asf/struts/struts2/trunk/plugins/rest/src/main/java/org/apache/struts2/rest/RestActionMapper.java
and
http://svn.apache.org/repos/asf/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.java
And create you're own.
Since you asked, the REST plugin with the NamedVariablePatternMatcher
enabled would allow you to move some params into the path to tidy it
up a bit (and address each resource with a unique url):
This might be what I'm looking for... I can "read the source, luke"
at
http://svn.opensymphony.com/fisheye/browse/~raw,r=1664/xwork/trunk/src/java/com/opensymphony/xwork2/util/NamedVariablePatternMatcher.java
But I don't see *any* documentation for this. Where exactly would I
specify those patterns described in the javadoc at the top of that
java? I don't understand how NamedVariablePatternMatcher relates to
the REST plugin...
The NamedVariablePatternMatcher isn't documented at all yet as far as I
know (except perhaps in Don's presentation - haven't checked) [1]
The relationship to the REST plugin is that it was written to support
namespace parameters for it [2]. It could probably be used with the
normal action mapper or smarturls but I doubt anyone's tried that yet.
It's enabled by overridding the PatternMatcher bean in struts.xml:
<bean type="com.opensymphony.xwork2.util.PatternMatcher" name="struts"
class="com.opensymphony.xwork2.util.NamedVariablePatternMatcher"/>
(see struts-default.xml for comparison)
The patterns mentioned in the javadoc are assumed to be specified using
@Namespace within your action (rest/codebehind) but I suppose you could
specify them with namespace attributes in struts.xml too (I'm guessing)
as it all results in the same config.
Hope some of this helps. I haven't tried anything as complicated or
flexible as you're doing with action params.
[1] http://www.jroller.com/mrdon/entry/struts_2_and_rest_apachecon
[2]
http://www.nabble.com/-S2.1--url-action-mapping-problem-(restful)-t4695060.html
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]