[SPRING] 드롭 박스 - 스프링 MVC 모델 / 컨텍스트에서 freemarker를 사용하여 폼으로
SPRING드롭 박스 - 스프링 MVC 모델 / 컨텍스트에서 freemarker를 사용하여 폼으로
이것은 아주 기본적인 것이어야하지만 나는 웹에서 그걸 발견 할 수 없다. 나는 함께 맞출 수없는 것처럼 보인다.
우리는 freemarker와 함께 Spring MVC를 사용하고 있습니다. 이제는 내 페이지에 양식을 추가하여 미리 정의 된 목록에서 값을 선택할 수있게하고 싶습니다 (백엔드에서 데이터베이스 액세스가 필요합니다).
내 컨트롤러 :
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public ModelAndView get(@PathVariable Integer id) {
// stuff..
ModelAndView mav = new ModelAndView();
mav.addObject("targetObject", new TargetObject());
mav.addObject("options", Arrays.asList("a", "b", "c"));
mav.setViewName("someview");
return mav;
}
나는 freemarkers spring support spring.ftl을 발견했으며, 이렇게 시도한 <@ spring.formSingleSelect>을 사용해야합니다.
someView.ftl :
<#import "../spring.ftl" as spring />
<form action="somePath" method="POST">
<@spring.formSingleSelect "targetObject.type", "options", " " />
<input type="submit" value="submit"/>
</form>
따라서 targetObject.type은 보이는 매크로에 의해 자동으로 바인딩됩니다.
그러나 매크로가 옵션을 생성 할 수 있도록 freemarker 시퀀스에 내 옵션을 어떻게 얻을 수 있습니까?
지금 나는 얻는다 :
Expected collection or sequence. options evaluated instead to freemarker.template.SimpleScalar on line 227, column 20 in spring.ftl.
The problematic instruction:
----------
==> list options as value [on line 227, column 13 in spring.ftl]
in user-directive spring.formSingleSelect [on line 53, column 9 in productBase/show.ftl]
----------
나는 또한 시험했다 :
<@spring.bind "${options}" />
그리고 그 라인을 따라 더 많은 것들이 있지만 성공하지 못했습니다 :
freemarker.core.NonStringException: Error on line 48, column 18 in someView.ftl
Expecting a string, date or number here, Expression options is instead a freemarker.template.SimpleSequence
어떤 도움을 주셔서 감사합니다!
해결법
-
==============================
1.많은 말을 한 후 다시 생각해 보니 마침내 해결책을 발견했습니다.
많은 말을 한 후 다시 생각해 보니 마침내 해결책을 발견했습니다.
먼저
나는 분명히 콩을 가지고 있어야한다.
둘째
옵션은 문자열 목록으로 초기화되고 Spring MVC가 페이지에 제공해야합니다.
public ModelAndView get() { // ... ModelAndView mav = new ModelAndView(); List<String> options = Arrays.asList(getOptionsFromDatabaseAndConvertToStringList()); mav.addObject("options",options ); mav.setViewName("someview"); return mav; }
제삼
옵션은 이제 freemarker 템플릿에 바인딩되어야하며 다른 freemarker 변수와 마찬가지로 액세스 할 수 있습니다 (즉 인용 부호 없음).
<@spring.bind "options" /> <form action="whatever" method="POST"> <@spring.formSingleSelect "targetBean.choice", options, " " /> <input type="submit" value="submit"/> </form>
-
==============================
2.formSingleSelect의 문서에 따르면
formSingleSelect의 문서에 따르면
@param options a map (value=label) of all the available options
가장 좋은 방법은 값을 키와 레이블로 맵에 맵 값으로 제공하는 것입니다. 그렇지 않으면 freemarker가 아마 당신을 위해 포장을하려고 할 것이고 당신은 통제력이 떨어진다.
나는 단지 유효성을 확인했다 : 당신이 당신 자신의지도를 제공한다면 모든 것이 잘된다.
<spring.formSingleSelect "target.property" referenceToYourMapProvidedInController ""/>
from https://stackoverflow.com/questions/11433510/dropdown-box-from-spring-mvc-model-context-to-form-using-freemarker by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 보안 익명 액세스를 가능하게하는 Java 기반 구성 (0) | 2019.04.23 |
---|---|
[SPRING] 터미널에서 XML 스키마 네임 스페이스에 대한 Spring NamespaceHandler를 찾을 수 없습니다. (0) | 2019.04.23 |
[SPRING] Spring 데이터 RedisTemplate : 값과 해시 값 직렬화 (0) | 2019.04.23 |
[SPRING] Autowired spring 서비스로 맞춤형 검사기 테스트 (0) | 2019.04.22 |
[SPRING] Spring / JTA / JPA 유닛 테스트 : 롤백이 작동하지 않습니다. (0) | 2019.04.22 |