Right now, my web.xml is configured in the way that Spring MVC will take over anything that has *.html suffix. I have a few controllers that generate the web links based on current user state.
For instance, I have the following code to determine what the “Next” button should point to:
if (nextSlide != null) {
nextLink = String.format("/%s/module/%d/slide/%d.html", studyName, moduleId, nextSlide.getKey());
}
else {
nextLink = String.format("/%s/module/all.html", studyName);
}
But, I don’t like this approach because I’m hardcoding the “.html” to the links here. I could certainly create a factory that generates links with “.html” suffix to hide from all the controller code, but that still requires me to hardcode “.html” once in my Java code… not too DRY.
I’m basically hoping Spring MVC has some APIs that allow me to construct the links. If these APIs don’t exist, do you hardcode the suffix in the Java code like what I do here?
There is not. Given what you currently have, you have three options. Two of these are your option, and dwb’s option. The other is to create your own taglib.
It seems like you’re doing some kind of wizard functionality (where screen 2 is dependent on a click from screen 1). If that’s the case, I would look into Spring Webflow.
Another possibility is to perform an AJAX callout to some sort of decision method, or you could handle this all on the client side with JavaScript.
Also, FWIW, I don’t think coding .html is breaking DRY, but I would be concerned about maintenance in case your servlet ever matched on something other than this suffix. You could most likely do something similar to the below example by just essentially returning a new
ModelAndViewor redirecting to one at least: