23

I have searched hard for a syntax like the JSTL one ${pageContext.request.contextPath},

I did made a javascript code to change the action attribute on the form to call the edit method on the spring controller so, the problem is the below code dont work without calling the Context first like ${pageContext.request.contextPath}/edit.html

<script th:inline="javascript"> function edit() { document.getElementById("user_form").action = "/edit.html"; } </script> 

so what is the Syntax to call Thymeleaf context path?

4 Answers 4

42

In Thymeleaf the equivalent of JSP's ${pageContext.request.contextPath}/edit.html would be @{/edit.html}

Check out this part of the Thymeleaf documentation for more details

In your case you would write :

<script th:inline="javascript"> function edit() { var link = /*[[@{/edit.html}]]*/ 'test'; document.getElementById("user_form").action = link; } </script> 

The /*[[ - ]]*/ syntax is used by Thymeleaf to evaluate variables used by Javascript, without breaking the script if that where to be statically loaded. Check out this part of the documentation for more details

Sign up to request clarification or add additional context in comments.

2 Comments

i have already tried that javascript will put it in the rendered page as it is ,it will not be rendered like first use
I've missed the @{'/url'} adding which solved my problem.
10

My solution for Thymeleaf and jQuery is below.

Use ${#httpServletRequest.getContextPath()} in Thymeleaf to write the context path in the meta element:

<meta name="_ctx" th:content="${#httpServletRequest.getContextPath()}" /> 

and in jQuery, use $.ajaxPrefilter() to prepend context path to all jQuery AJAX requests:

var _ctx = $("meta[name='_ctx']").attr("content"); // Prepend context path to all jQuery AJAX requests $.ajaxPrefilter(function( options, originalOptions, jqXHR ) { if (!options.crossDomain) { options.url = _ctx + options.url; } }); 

1 Comment

Much preferred, keeps the JS unobtrusive.
7

Just in case anybody else stumbles upon this question looking for what I originally had been...setting a context path variable for the root of the page inside the Thymeleaf page to carry over to an external JQuery page. Here is how it worked for me...same as above just left blank...

Old way with JSP

<script >var contextRoot = "${pageContext.request.contextPath}"; </script> 

New way with Thymeleaf

<script th:inline="javascript"> var contextRoot = /*[[@{/}]]*/ ''; </script> 

and a link with more information... http://forum.thymeleaf.org/JSESSIONID-in-td3386826.html

(also depending on the IDE, I set the script over two+ lines as opposed to the same line of the code number.)

1 Comment

For me this solution results in Thymeleaf exception when used on guest pages (such as Login) github.com/thymeleaf/thymeleaf-spring/issues/110
2

Try this:

var BASE_CONTEXT_PATH = $('meta[name=context-path]').attr("content"); BASE_CONTEXT_PATH = BASE_CONTEXT_PATH.substr(0, BASE_CONTEXT_PATH.length - 1);
<meta name="context-path" th:content="@{/}"/>

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.