|
11 | 11 |
|
12 | 12 | import java.util.Arrays; |
13 | 13 | import java.util.Collection; |
14 | | -import java.util.Enumeration; |
15 | 14 | import java.util.Iterator; |
16 | 15 | import java.util.Map; |
17 | 16 | import java.util.Map.Entry; |
18 | 17 | import java.util.Set; |
19 | 18 |
|
20 | | -import javax.servlet.http.HttpServletRequest; |
21 | | - |
22 | 19 | import org.springframework.data.domain.Page; |
23 | 20 | import org.springframework.data.domain.Sort; |
24 | 21 | import org.springframework.data.domain.Sort.Direction; |
|
31 | 28 | import org.thymeleaf.standard.expression.IStandardExpression; |
32 | 29 | import org.thymeleaf.standard.expression.IStandardExpressionParser; |
33 | 30 | import org.thymeleaf.standard.expression.StandardExpressions; |
| 31 | +import org.thymeleaf.web.IWebExchange; |
| 32 | +import org.thymeleaf.web.IWebRequest; |
| 33 | +import org.thymeleaf.web.servlet.IServletWebRequest; |
34 | 34 | import org.unbescape.html.HtmlEscape; |
35 | 35 |
|
36 | 36 | @SuppressWarnings("unchecked") |
@@ -60,12 +60,12 @@ public static Page<?> findPage(final ITemplateContext context) { |
60 | 60 |
|
61 | 61 | // Search for Page object, and only one instance, as request attribute |
62 | 62 | if (context instanceof IWebContext) { |
63 | | - HttpServletRequest request = ((IWebContext) context).getRequest(); |
64 | | - Enumeration<String> attrNames = request.getAttributeNames(); |
| 63 | + IWebExchange webExchange = ((IWebContext) context).getExchange(); |
| 64 | + Set<String> attrNames = webExchange.getAllAttributeNames(); |
65 | 65 | Page<?> pageOnRequest = null; |
66 | | - while (attrNames.hasMoreElements()) { |
67 | | - String attrName = (String) attrNames.nextElement(); |
68 | | - Object attr = request.getAttribute(attrName); |
| 66 | + |
| 67 | + for (String attrName : attrNames) { |
| 68 | + Object attr = webExchange.getAttributeValue(attrName); |
69 | 69 | if (isPageInstance(attr)) { |
70 | 70 | if (pageOnRequest != null) { |
71 | 71 | throw new InvalidObjectParameterException("More than one Page object found on request!"); |
@@ -162,10 +162,11 @@ private static String buildBaseUrl(final ITemplateContext context, Collection<St |
162 | 162 | // Creates url from actual request URI and parameters |
163 | 163 | final StringBuilder builder = new StringBuilder(); |
164 | 164 | final IWebContext webContext = (IWebContext) context; |
165 | | - final HttpServletRequest request = webContext.getRequest(); |
| 165 | + final IWebExchange webExchange = webContext.getExchange(); |
| 166 | + final IWebRequest request = webExchange.getRequest(); |
166 | 167 |
|
167 | 168 | // URL base path from request |
168 | | - builder.append(request.getRequestURI()); |
| 169 | + builder.append(getRequestURI(request)); |
169 | 170 |
|
170 | 171 | Map<String, String[]> params = request.getParameterMap(); |
171 | 172 | Set<Entry<String, String[]>> entries = params.entrySet(); |
@@ -203,6 +204,31 @@ private static String buildBaseUrl(final ITemplateContext context, Collection<St |
203 | 204 | return url == null ? EMPTY : url; |
204 | 205 | } |
205 | 206 |
|
| 207 | + private static String getRequestURI(IWebRequest webRequest) { |
| 208 | + if (webRequest instanceof IServletWebRequest servletWebRequest) { |
| 209 | + return servletWebRequest.getRequestURI(); |
| 210 | + } else { |
| 211 | + // from org.thymeleaf.web.IWebRequest.getRequestURL |
| 212 | + String scheme = webRequest.getScheme(); |
| 213 | + String serverName = webRequest.getServerName(); |
| 214 | + Integer serverPort = webRequest.getServerPort(); |
| 215 | + String requestPath = webRequest.getRequestPath(); |
| 216 | + if (scheme != null && serverName != null && serverPort != null) { |
| 217 | + StringBuilder urlBuilder = new StringBuilder(); |
| 218 | + urlBuilder.append(scheme).append("://").append(serverName); |
| 219 | + if ((!scheme.equals("http") || serverPort != 80) && (!scheme.equals("https") || serverPort != 443)) { |
| 220 | + urlBuilder.append(':').append(serverPort); |
| 221 | + } |
| 222 | + |
| 223 | + urlBuilder.append(requestPath); |
| 224 | + |
| 225 | + return urlBuilder.toString(); |
| 226 | + } else { |
| 227 | + throw new UnsupportedOperationException("Request scheme, server name or port are null in this environment. Cannot compute request URL"); |
| 228 | + } |
| 229 | + } |
| 230 | + } |
| 231 | + |
206 | 232 | private static boolean isPageInstance(Object page) { |
207 | 233 | return page != null && (page instanceof Page<?>); |
208 | 234 | } |
|
0 commit comments