- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我是 thymeleaf 的新手,我想使用 thymeleaf url 创建动态查询字符串。对于分页,我使用公共(public)片段并在所有页面中包含片段。所有页面都有搜索选项,搜索也需要分页。因此,我们需要在分页中传递动态查询字符串以用于搜索条件。但是当我动态创建查询字符串时,URL 对特殊字符进行编码,如 =
和 &
。以下是我的代码
<!-- Pagination Bar -->
<div th:fragment='paginationbar(searchArguments)'>
<div class='pagination pagination-centered'>
<ul>
<li th:class="${page.firstPage}? 'disabled' : ''">
<span th:if='${page.firstPage}'> First</span>
<a th:if='${not page.firstPage}' th:href='@{${page.url}(page=0,size=${page.size},${searchArguments})}'>First</a>
</li>
<li th:class="${page.hasPreviousPage}? '' : 'disabled'">
<span th:if='${not page.hasPreviousPage}'><<</span>
<a th:if='${page.hasPreviousPage}' th:href='@{${page.url}(page=${page.currentNumber - 2},size=${page.size},${searchArguments})}' title='Go to previous page'><<</a>
</li>
<li th:each='item : ${page.items}' th:class="${item.current}? 'active' : ''">
<span th:if='${item.current}' th:text='${item.number}'>1</span>
<a th:if='${not item.current}' th:href='@{${page.url}(page=${item.number - 1},size=${page.size},${searchArguments})}'><span th:text='${item.number}'>1</span></a>
</li>
<li th:class="${page.hasNextPage}? '' : 'disabled'">
<span th:if='${not page.hasNextPage}'>>></span>
<a th:if='${page.hasNextPage}' th:href='@{${page.url}(page=${page.currentNumber},size=${page.size},${searchArguments})}' title='Go to next page'>>></a>
</li>
<li th:class="${page.lastPage}? 'disabled' : ''">
<span th:if='${page.lastPage}'>Last </span>
<a th:if='${not page.lastPage}' th:href='@{${page.url}(page=${page.totalPages - 1},size=${page.size},${searchArguments})}'>Last</a>
</li>
</ul>
</div>
</div>
在页面中包含片段:
<div th:include="admin/fragments/pagination-fragment :: paginationbar('title='+${title}+'&status='+${status})" th:if="${title != null}"></div>
查看页面源代码时,创建如下URL:
<a href="/sample/admin/search-category?page=1&size=5&title%3Dtil%26status%3D"><span>2</span></a>
在上面的 URL 中,浏览器将 title='+${title}+'&status='+${status}
转换为 title%3Dtil%26status%3D
。我们如何为分页链接设置实际的查询字符串?
更新 Thymeleaf 配置
public class MultiViewResolverConfig{
@Autowired
private Environment env;
/**
* This method is used to create tiles view resolver which have
* view resolver first priority for resolve response view
* */
@Bean
public TilesViewResolver tilesViewResolver() {
TilesViewResolver resolver = new TilesViewResolver();
resolver.clearCache();
resolver.setCache(Boolean.parseBoolean(env.getProperty("tiles.cache")));
resolver.setCacheLimit(Integer.parseInt(env.getProperty("tiles.cache.limit")));
return resolver;
}
/**
* This method is used to configure tiles for application and
* specify which definitions files are used.
* This method create a bean and register.
* */
@Bean
public TilesConfigurer tilesConfigure(){
TilesConfigurer configurer = new TilesConfigurer();
configurer.setDefinitions(new String[]{"classpath:tiles-definitions/user-definitions.xml",
"classpath:tiles-definitions/public-definitions.xml", "classpath:tiles-definitions/admin-definitions.xml"});
//configurer.setValidateDefinitions(true);
//configurer.setCheckRefresh(true);
return configurer;
}
/* Thymeleaf configuration */
private ServletContextTemplateResolver templateResolver() {
ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver();
templateResolver.setPrefix("/WEB-INF/views/");
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode("HTML5");
templateResolver.setCacheable(Boolean.parseBoolean(env.getProperty("thm.cache")));
templateResolver.setCacheTTLMs(Long.parseLong(env.getProperty("thm.cache.limit")));
return templateResolver;
}
private SpringTemplateEngine templateEngine() {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.addDialect(new LayoutDialect());
templateEngine.setTemplateResolver(templateResolver());
return templateEngine;
}
private ThymeleafViewResolver thymeleafViewResolver() {
ThymeleafViewResolver thymeleafViewResolver = new ThymeleafViewResolver();
thymeleafViewResolver.setCharacterEncoding("UTF-8");
thymeleafViewResolver.setViewClass(ThymeleafView.class);
thymeleafViewResolver.setViewNames(new String[]{"admin/**"});
thymeleafViewResolver.setTemplateEngine(templateEngine());
return thymeleafViewResolver;
}
/* JSP view resolver */
private InternalResourceViewResolver jspViewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
resolver.setViewClass(JstlView.class);
resolver.setCache(Boolean.parseBoolean(env.getProperty("url.cache")));
resolver.setCacheLimit(Integer.parseInt(env.getProperty("url.cache.limit")));
return resolver;
}
@Bean
public ViewResolver setupViewResolver(ContentNegotiationManager manager) {
List<ViewResolver> resolvers = new ArrayList<ViewResolver>();
resolvers.add(tilesViewResolver());
resolvers.add(thymeleafViewResolver());
resolvers.add(jspViewResolver());
ContentNegotiatingViewResolver viewResolver = new ContentNegotiatingViewResolver();
viewResolver.setViewResolvers(resolvers);
viewResolver.setContentNegotiationManager(manager);
return viewResolver;
}}
最佳答案
这个问题有简单的解决方案,我正在尝试从 thymeleaf href
属性创建 URL,如下所示:
th:href='@{${page.url}(page=0,size=${page.size},${searchArguments})}'
但不需要将参数传递给 thymeleaf th:href
属性。只需将查询字符串附加到您的 th:href
属性,如下所示:
th:href='@{${page.url}(page=0,size=${page.size})}+${searchArguments}'
在此,thymeleaf 创建 URL,我们将动态查询字符串附加到 URL。
关于java - Thymeleaf:在 thymeleaf 中创建动态 URL 查询字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28587097/
如何使用 SPListCollection.Add(String, String, String, String, Int32, String, SPListTemplate.QuickLaunchO
我刚刚开始使用 C++ 并且对 C# 有一些经验,所以我有一些一般的编程经验。然而,似乎我马上就被击落了。我试过在谷歌上寻找,以免浪费任何人的时间,但没有结果。 int main(int argc,
这个问题已经有答案了: In Java 8 how do I transform a Map to another Map using a lambda? (8 个回答) Convert a Map>
我正在使用 node + typescript 和集成的 swagger 进行 API 调用。我 Swagger 提出以下要求 http://localhost:3033/employees/sear
我是 C++ 容器模板的新手。我收集了一些记录。每条记录都有一个唯一的名称,以及一个字段/值对列表。将按名称访问记录。字段/值对的顺序很重要。因此我设计如下: typedef string
我需要这两种方法,但j2me没有,我找到了一个replaceall();但这是 replaceall(string,string,string); 第二个方法是SringBuffer但在j2me中它没
If string is an alias of String in the .net framework为什么会发生这种情况,我应该如何解释它: type JustAString = string
我有两个列表(或字符串):一个大,另一个小。 我想检查较大的(A)是否包含小的(B)。 我的期望如下: 案例 1. B 是 A 的子集 A = [1,2,3] B = [1,2] contains(A
我有一个似乎无法解决的小问题。 这里...我有一个像这样创建的输入... var input = $(''); 如果我这样做......一切都很好 $(this).append(input); 如果我
我有以下代码片段 string[] lines = objects.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.No
这可能真的很简单,但我已经坚持了一段时间了。 我正在尝试输出一个字符串,然后输出一个带有两位小数的 double ,后跟另一个字符串,这是我的代码。 System.out.printf("成本:%.2
以下是 Cloud Firestore 列表查询中的示例之一 citiesRef.where("state", ">=", "CA").where("state", "= 字符串,我们在Stack O
我正在尝试检查一个字符串是否包含在另一个字符串中。后面的代码非常简单。我怎样才能在 jquery 中做到这一点? function deleteRow(locName, locID) { if
这个问题在这里已经有了答案: How to implement big int in C++ (14 个答案) 关闭 9 年前。 我有 2 个字符串,都只包含数字。这些数字大于 uint64_t 的
我有一个带有自定义转换器的 Dozer 映射: com.xyz.Customer com.xyz.CustomerDAO customerName
这个问题在这里已经有了答案: How do I compare strings in Java? (23 个回答) 关闭 6 年前。 我想了解字符串池的工作原理以及一个字符串等于另一个字符串的规则是
我已阅读 this问题和其他一些问题。但它们与我的问题有些无关 对于 UILabel 如果你不指定 ? 或 ! 你会得到这样的错误: @IBOutlet property has non-option
这两种方法中哪一种在理论上更快,为什么? (指向字符串的指针必须是常量。) destination[count] 和 *destination++ 之间的确切区别是什么? destination[co
This question already has answers here: Closed 11 years ago. Possible Duplicates: Is String.Format a
我有一个Stream一个文件的,现在我想将相同的单词组合成 Map这很重要,这个词在 Stream 中出现的频率. 我知道我必须使用 collect(Collectors.groupingBy(..)
我是一名优秀的程序员,十分优秀!