2012-07-11 2 views
4

이것은 매우 기본적인 것이어야하지만 웹에서이 항목을 찾을 수는 없습니다. 함께 맞출 수없는 것처럼 보입니다.드롭 다운 상자 - freemarker를 사용하여 스프링 MVC 모델/컨텍스트에서 양식

우리는 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.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] 
---------- 

가 나는 또한 시도 : 어떤 도움

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 

감사의 :

<@spring.bind "${options}" /> 

더 그 라인을 따라하지만 성공 일을! 나는 콩이 옵션은 필요

분명히

두 번째 내 선택을 누르고 있어야합니다

첫째 :

+0

"옵션"대신 옵션을 사용하십시오. –

답변

7

많은 다른 표현 후 다시 생각 나는 마침내 해결책을 발견 문자열 목록으로 초기화되고 Spring MVC가 페이지에 제공 할 내용 :

,515,
public ModelAndView get() { 

    // ... 
    ModelAndView mav = new ModelAndView(); 
    List<String> options = Arrays.asList(getOptionsFromDatabaseAndConvertToStringList()); 
    mav.addObject("options",options); 
    mav.setViewName("someview"); 

    return mav; 
} 

셋째

options 이제 프리 마커 템플릿에 결합해야하고 다른 프리 마커 변수와 같이 접근 될 수있다 (즉, NO 인용 부호) :

<@spring.bind "options" /> 

<form action="whatever" method="POST"> 
    <@spring.formSingleSelect "targetBean.choice", options, " " /> 
    <input type="submit" value="submit"/> 
</form> 
+1

먼저 감사하다고 말하고 싶지만 string list가 아니라 id와 value로 dropdownlist를 생성 할 수있는 능력이 부족합니다. 예를 들어 나는 foo, boo 및 hoo를 표시 할 목록을 가지고 있으며 ID는 f, b 및 h입니다. 목록에 둘 다를 포함 할 수는 없습니까? –

+3

formSingleSelect는지도도 지원합니다. 실제로 목록을 전달하면 키/값 쌍 (key == value)이 만들어집니다. 내가 생각하는 컨트롤러로 보내지는 선택은 항상 열쇠가 될 것입니다. 매크로 정의를 확인하십시오. http://svn.apache.org/repos/asf/qpid/tags/pre-M1/java/java/management/core/lib/spring/spring.ftl – Pete

0

formSingleSelect의 문서에 따르면 :

@param options a map (value=label) of all the available options 

나는 당신의 최선의지도 값으로 키와 레이블과 같은 값으로지도를 제공하는 것입니다 생각합니다. 그렇지 않으면 freemarker가 아마 당신을 위해 포장을하려고 할 것이고 당신은 통제력이 떨어진다.

난 그냥 유효성을 검사했다 : 당신이 자신의지도를 제공하면 모든 것이 잘된다.

<spring.formSingleSelect "target.property" referenceToYourMapProvidedInController ""/> 
+0

LinkedHashMap 컨트롤러 클래스에서 표시 순서를 보장 할 수 있습니다. –