私はウェブサイトのインデックスを持っています..... http://localhost/myContext/
RESTインデックス............... ...
、多くのRESTページhttp://localhost/myContext/restController/
... http://localhost/myContext/restController/*/*
相対URIの<spring:url />で絶対パスを解決する方法
RESTコントローラは、URLに応じて動的にコンテンツをロードし、相対パスを使用しています。
これらのページに直接ブラウザでアクセスすると、すべてのページが正常に動作し、自由にナビゲートできます。
は今、私はAJAXを使用して/myContext/
インデックスに直接restController/*/*
ページを統合したいです。内容はDIVにロードされます。 ブラウザのURLは決して変更されません
私のブラウザは、Webサイトのインデックスを打つ/myContext/
次にJSPを指し示すAJAX負荷/restController/
、... JSPインサイド
:に基づいて直接<spring:url value="something">
戻っ全体ではなく、絶対パスのsomething
コントローラのservletPath /myContext/restController/something
<spring:url>
は相対パスを返すため、ブラウザは/myContext/something
-404をヒットしようとします
これは以前に<form:form>
を使用したフォームでこれを行いました。アクションは、コントローラのservletPathに対して相対的に作成されます。
<spring:url>
(またはその他)の絶対パスを取得する最もクリーンな方法は、相対URIからですか?
私は${pageContext.request.requestURI}
を使用してみましたが、それは私がナビゲートする最後のダッシュの存在かどうかに依存しているため、ファイル名は動作しませんフィルタリング、JSPファイル名(/myContext/restController/something/ctrl.jsp
)が含まれています。
また、<form:form />
を含めて試してみました.Javascriptを使用してアクションを回復しました。それは非常に醜いですが、それは動作します...良い解決策tho。
<spring:url>
からコード:
private String createUrl() throws JspException {
HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
HttpServletResponse response = (HttpServletResponse) pageContext.getResponse();
StringBuilder url = new StringBuilder();
if (this.type == UrlType.CONTEXT_RELATIVE) {
// add application context to url
if (this.context == null) {
url.append(request.getContextPath());
}
else {
if (this.context.endsWith("/")) {
url.append(this.context.substring(0, this.context.length() - 1));
}
else {
url.append(this.context);
}
}
}
if (this.type != UrlType.RELATIVE && this.type != UrlType.ABSOLUTE && !this.value.startsWith("/")) {
url.append("/");
}
url.append(replaceUriTemplateParams(this.value, this.params, this.templateParams));
url.append(createQueryString(this.params, this.templateParams, (url.indexOf("?") == -1)));
String urlStr = url.toString();
if (this.type != UrlType.ABSOLUTE) {
// Add the session identifier if needed
// (Do not embed the session identifier in a remote link!)
urlStr = response.encodeURL(urlStr);
}
// HTML and/or JavaScript escape, if demanded.
urlStr = htmlEscape(urlStr);
urlStr = this.javaScriptEscape ? JavaScriptUtils.javaScriptEscape(urlStr) : urlStr;
return urlStr;
}
あなたがspring urlを使用することを強制されていない場合は、elを使用して ベースルールは絶対値になります –