我的问题如下:
我有2个不同的对象,我要从单个表单中填充.
使用1个对象,我只需要在newFoo.html中执行:
<form th:object="${foo} th:action="@{/foo}" method="post">
<input type="text" th:field="*{name}"/>
<button type="submit">Go</button>
</form>
Run Code Online (Sandbox Code Playgroud)
并在FooController中:
@RequestMapping(value = "/foo/new", method = RequestMethod.GET)
public String newFoo(final Foo foo, Model model) {
return "newFoo";
}
@RequestMapping(value = "/foo/new", method = RequestMethod.POST)
public String saveFoo(final Foo foo, final BindingResult bindingResult, Model model) {
fooService.save(foo);
return "redirect:/foo/new";
}
Run Code Online (Sandbox Code Playgroud)
假设我有另一个带有"status"变量的对象栏.如何传递该对象以便我可以在同一表单中提交输入?
喜欢:
<form th:object="${foo} && ${bar}" th:action="@{/foo}" method="post">
<input type="text" th:field="*{name}"/>
<input type="text" th:field="*{status}"/>
<button type="submit">Go</button>
</form>
Run Code Online (Sandbox Code Playgroud)
到目前为止,我尝试使用th:object中的fieldset,这不起作用,我试图将两个:对象放在表单中,这也不起作用.
我找到的唯一方法是构建一个包含这两个对象的其他对象,然后传递它.这很好,但我不能创造那种对象,这是无稽之谈(即使它有效).
当然,对象并不像Foo和Bar那么简单,否则我会合并这两个.但那不是我能做的.
甚至可以传递两个这样的对象来在表单中使用吗?
谢谢.
在Spring Boot的文档中,关于提供静态内容,它说:
默认情况下,Spring Boot将从类路径中名为/ static(或/ public或/ resources或/ META-INF/resources)的目录中提供静态内容.
我发现目录中的所有内容:
src/main/resources
Run Code Online (Sandbox Code Playgroud)
将被复制到类路径中,因此我可以将我的静态内容放入:
src/main/resources/static
Run Code Online (Sandbox Code Playgroud)
一切都会好起来,我很高兴,因为我可以在src目录下有我的静态内容.
但是,我对此有一些疑问:
src/main/resources/static而不是说类路径(我觉得这有点令人困惑)?src/main/resources/将始终复制到类路径中,这样做是否合适?src/main/resources/)?我有以下代码:
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta name="_csrf" th:content="${_csrf.token}"/>
<!-- default header name is X-CSRF-TOKEN -->
<meta name="_csrf_header" th:content="${_csrf.headerName}"/>
<title>Fileupload Test</title>
</head>
<body>
<p th:text="${msg}"></p>
<form action="#" th:action="@{/fileUpload}" method="post" enctype="multipart/form-data">
<input type="file" name="myFile"/>
<input type="submit"/>
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我收到错误HTTP 403:
在请求参数'_csrf'或标题'X-CSRF-TOKEN'上找到无效的CSRF令牌'null'
如果我使用此行,CSRF正在工作:
<form action="#" th:action="@{/fileUpload} + '?' + ${_csrf.parameterName} + '=' + ${_csrf.token}" method="post" enctype="multipart/form-data">
Run Code Online (Sandbox Code Playgroud)
但是如果我使用标题,我怎样才能实现工作CSRF?
我完全改变了这个问题,因为它的一部分在 Avnish的帮助下得到了回答!汤姆把我送到了正确的方向,谢谢汤姆!
我的问题是我不知道如何告诉Thymeleaf在编辑时预先选择对象元素.
让我演示给你看:

此解决方案有效:
<select class="form-control" id="parts" name="parts" multiple="multiple">
<option th:each="part : ${partsAtribute}"
th:selected="${servisAttribute.parts.contains(part)}"
th:value="${part.id}"
th:text="${part.name}">Part name</option>
</select>
Run Code Online (Sandbox Code Playgroud)
我试过这个:
<select class="form-control" th:field="*{parts}" multiple="multiple">
<option th:each="part : ${partsAtribute}"
th:field="*{parts}"
th:value="${part.id}"
th:text="${part.name}">Part name</option>
</select>
Run Code Online (Sandbox Code Playgroud)
不工作.我也试过这个:
<select class="form-control" th:field="*{{parts}}" multiple="multiple">
<option th:each="part : ${partsAtribute}"
th:field="*{parts}"
th:value="${part.id}"
th:text="${part.name}">Part name</option>
</select>
Run Code Online (Sandbox Code Playgroud)
也没用.我试过th:field="*{parts}"从选项标签中删除,结果相同..
如果我改变th:value到${part}它的工作原理,但随后它并没有发回的ID字符串如[2,4,5,6,...],但Part像实例[第@ 43b45j,部分@ we43y7,...] ... .
更新:我刚刚注意到,如果只选择了一个部分,这是有效的:
<select class="form-control" th:field="*{parts}" multiple="multiple">
<option th:each="part : ${partsAtribute}"
th:field="*{parts}"
th:value="${part.id}"
th:text="${part.name}">Part name</option>
</select>
Run Code Online (Sandbox Code Playgroud)
如果选择了多个部件,则不起作用......
我正在使用Thymeleaf和spring mvc 4,但是当我想要打印列表大小时我遇到了问题
<tr th:each="u : ${users}" th:id="${u.username}" class="odd gradeX">
<th></th>
<td th:text="${u.username}"></td>
<td th:text="${u.email}"></td>
<td th:switch="${u.enabled}">
<span th:case="true" class="badge badge-primary">Acitf</span>
<span th:case="false" class="badge badge-danger">Désactivée</span>
<span th:case="*" class="badge badge-dark">Inconnue</span>
</td>
<td th:switch="${u.roles}">
<span th:case="ROLE_SUPER_ADMIN">Super ADmin</span>
<span th:case="ROLE_MANGER">Manager</span>
<span th:case="ROLE_SUPERVISEUR">Superviseur</span>
<span th:case="ROLE_USER">User</span>
<span th:case="*">Inconnue</span>
</td>
<td th:text="${#calendars.format(u.creationDate,'dd/MM/yyyy hh:mm')}"></td>
<td th:text="${#calendars.format(u.lastLogin,'dd/MM/yyyy hh:mm')}"></td>
**
<td th:text="${u.engines}"></td>
<td th:text="${u.subordonnes}"></td>
**
<td></td>
</tr>
Run Code Online (Sandbox Code Playgroud)
问题出在这里th:text="${u.engines}</td>.engines是我的User实体中的ArrayList .我尝试过th:size,th:list但它没有用.
任何人都可以帮助我
这是我的User实体:
@OneToMany(mappedBy …Run Code Online (Sandbox Code Playgroud) 您能否简单说明@TestInstance一下注释,以及它如何在JUnit 5中有用?
我认为我们可以通过使字段静态化来达到相同的效果。
sumOf()Kotlin 1.4 中的新函数与sumBy()或sumByDouble()函数有何不同?
我有这个代码
<div th:class="form-group">
<td><label class="control-label leftMargin10 rightMargin10" scope="col" th:text="#{insertHours.hhFrom}">Attivita'</label></td>
<td><select class="form-control" th:field="*{hhFrom}">
<option th:each="i : ${#numbers.sequence(0, 23)}" th:value="${i}" th:text="${i}" th:selected="${ i==9 } ">Options</option>
</select>
</td>
</div>
Run Code Online (Sandbox Code Playgroud)
当我尝试添加条件时:选中它不起作用.
我也用这段代码替换了:
th:attr="${i==9}? selected=selected: '' "
Run Code Online (Sandbox Code Playgroud)
但结果是一样的.
HTML
<select class="form-control" id="hhFrom" name="hhFrom">
<option value="0" selected="selected">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option …Run Code Online (Sandbox Code Playgroud) 我需要使用字符串列表中的所有值填充下拉列表.
控制器类
@RequestMapping(value = "/generateIds", method = RequestMethod.GET)
public String launchPage(Model model) {
List<Municipality> municipalities = rCountryService.finaAllMunicipalities();
//assume the list is populated with values
List<String> countryName = new ArrayList<String>();
for(int i=0; i<municipalities.size(); i++) {
countryName.add(municipalities.get(i).getCountry().toString());
}
model.addAttribute("countryName ", countryName );
return "generateIds";
}
Run Code Online (Sandbox Code Playgroud)
我不知道从哪里开始HTML,所以我从这开始
<select th:field="*{countryName }">
<option value="default">Select a country</option>
<option th:each="${countryName }" th:value="${countryName }"th:text="${countryName }"/>
</select>
Run Code Online (Sandbox Code Playgroud)
我的html/controller应该如何将列表中的所有元素添加为下拉选项?
提前致谢!
如何在JUnit 5中获取测试方法的名称?
java ×6
thymeleaf ×6
spring ×4
spring-mvc ×3
html ×2
junit ×2
junit5 ×2
testing ×2
unit-testing ×2
classpath ×1
collections ×1
csrf ×1
edit ×1
kotlin ×1
option ×1
security ×1
selected ×1
spring-boot ×1