다른 변수의 thymelephth:필드 값을 설정하는 방법
한 개체에서 기본값을 설정하고 다른 개체에 최종값을 저장해야 하는 간단한 텍스트 입력 필드가 있습니다.다음 코드가 작동하지 않습니다.
<div th:object="${form}">
<input class="form-control"
type="text"
th:value="${client.name}" //this line is ignored
th:field="*{clientName}"/>
</div>
form은 DTO 개체이고 client는 데이터베이스에서 Entity 개체입니다.
이 상황을 해결하기 위한 올바른 방법은 무엇입니까?
작동하지 않는다는 것은 - 초기값이 client.name= 이라고 가정합니다."Foo"를 입력하고 form.clientName= null.입력 필드 표시 값이 "Foo"이고 양식 제출 양식.clientName 값이 "Foo"가 되어야 합니다.그러나 입력 필드에는 아무것도 표시되지 않으며 제출 양식에 표시됩니다.clientName 값은 여전히 null입니다.
관심 있는 사람이 있으면 다음 구조를 사용하여 이 문제를 해결합니다(다른 질문에서 답을 찾음).
th:attr="value = ${client.name}"
이 방법으로 접근할 수 있습니다.
th:field
html합니다를 합니다.id
&name
. 값을 다음을 사용하여th:value
<input class="form-control"
type="text"
th:value="${client.name}" id="clientName" name="clientName" />
이것이 당신에게 도움이 되기를 바랍니다.
올바른 접근법은 전처리를 사용하는 것입니다.
예를들면
th:field="*{__${myVar}__}"
폼의 값을 유지하면서 페이지에 다시 올 필요가 없는 경우 다음 작업을 수행할 수 있습니다.
<form method="post" th:action="@{''}" th:object="${form}">
<input class="form-control"
type="text"
th:field="${client.name}"/>
일종의 마법입니다.
- = client.name 값을 설정합니다.
- 양식의 값을 '이름' 필드로 다시 보냅니다.따라서 양식 필드인 'clientName'을 'name'으로 변경해야 합니다.
사용자 입력 오류가 있는 페이지의 뒷면처럼 양식의 입력 값을 유지하는 것이 문제가 될 경우 다음 작업을 수행해야 합니다.
<form method="post" th:action="@{''}" th:object="${form}">
<input class="form-control"
type="text"
th:name="name"
th:value="${form.name != null} ? ${form.name} : ${client.name}"/>
이는 다음을 의미합니다.
- 양식 필드 이름은 'name'입니다.
- 값이 존재하는 경우 폼에서 가져온 값이고, 존재하지 않는 경우 클라이언트 빈에서 가져온 값입니다.페이지에 처음 도착한 값과 초기 값이 일치하고, 오류가 있는 경우 입력 값을 형성합니다.
고객 빈을 폼 빈에 매핑할 필요 없이.그리고 양식을 제출하면 값이 null이 아니라 ""(공백)이기 때문에 작동합니다.
질문을 제대로 이해하고 있다면 변수에 미리 지정된 값을 할당한 다음 Thymeleaf에서 렌더링할 때 해당 변수를 html 형태로 채우려고 하는 것입니다.이것이 당신이 묻는 것이라면, 나도 이 문제로 며칠 동안 고민하다가 당신의 게시물을 읽고 답을 찾았고, 나도 공유할 것이라고 생각했습니다.
제가 하고 있던 일은(누군가에게 도움이 되기를 바란다) 블로그 게시물의 ID에 값을 자동으로 할당하여 사용자가 제출하면 블로그 게시물이 제가 할당하고 싶은 ID를 자동으로 얻을 수 있도록 하는 것이었습니다.
*** 문제 *** 이 {th:field="*{id}"}와 같이 ID 변수를 할당하면 폼 입력 상자에 출력이 항상 "0"이 됩니다.그래서 저는 이 문제를 해결하기 위해 다양한 방법을 시도했습니다. th:값과 th:이름을 추가하면 항상 큰 지방이 "0"이 됩니다.
그래서, 머리를 부딪치고, 포럼들을 뒤지다가, 이 작은 기쁨의 덩어리를 발견했습니다.
https://frontbackend.com/thymeleaf/hidden-inputs-in-thymeleaf
비록 그것이 저의 구체적인 문제를 다루지는 못했지만, 답은 거기에 답이 있었습니다.네가 직접 읽게 하지는 않을 거야, 왜냐면 난 그게 싫어.
**** 정답 ***
{HTML 양식으로}
<input class="form-control" type="text" id="blog-id" th:field="*{id}">
{컨트롤러에서}
@GetMapping("/") 공용 문자열 표시(모델) {
// Create the object first
BlogPost blogPost = new BlogPost();
// Then add assign the value to object
blogPost.setId( Value You Want To Add );
// Then send the object that you added the id to as the attribute
model.addAttribute("blogPost", blogPost);
return "postBlog";
}
*** 결론 *** 나는 당신이 보고 싶은 것으로 코드를 줄였습니다. (악플러들이 시작하기 전에)이것이 제 해결책이었고 완벽하게 작동했습니다.아니요, 우리 모두는 문제를 해결하는 방법을 알고 있습니다.
건배! 자바에디!
따라서 th:field를 th:name으로 바꾸고 addth:value를 지정하면 th:value는 전달하는 변수의 값을 갖게 됩니다.
<div class="col-auto">
<input type="text" th:value="${client.name}" th:name="clientName"
class="form control">
</div>
다음과 같은 두 가지 가능한 솔루션이 있습니다.
1) 보기에서 자바스크립트로 설정할 수 있습니다...(권장하지 않음)
<input class="form-control"
type="text"
id="tbFormControll"
th:field="*{clientName}"/>
<script type="text/javascript">
document.getElementById("tbFormControll").value = "default";
</script>
2) 또는 컨트롤러가 GET 작업에서 보기에 첨부하는 값을 모델에서 설정하는 것이 더 나은 해결책입니다.컨트롤러에서 값을 변경할 수도 있습니다. $client.name 에서 Java 객체를 만들고 setClientName을 호출하면 됩니다.
public class FormControllModel {
...
private String clientName = "default";
public String getClientName () {
return clientName;
}
public void setClientName (String value) {
clientName = value;
}
...
}
도움이 되었으면 좋겠습니다.
언급URL : https://stackoverflow.com/questions/25027801/how-to-set-thymeleaf-thfield-value-from-other-variable
'programing' 카테고리의 다른 글
조건이 고유한 경우 MySQL 고유 카운트 (0) | 2023.09.28 |
---|---|
Spring Boot 2.0.x가 특정 프로파일에 대해 보안을 사용하지 않도록 설정함 (0) | 2023.09.28 |
스레드 오류 탐지를 위해 Helgrind 또는 DRD를 사용해야 합니까? (0) | 2023.09.28 |
iOS에 파일 쓰기 (0) | 2023.09.28 |
VBA를 통해 CSV 파일 열기(성능) (0) | 2023.09.28 |