2009-04-12 2 views
0

JSP에서 Struts2 조치에 대한 맵 특성을 채 웁니다. 사용해야하는 데이터 이름의 형식은 무엇입니까? 처음에는 Map < String, String>을 채우는 데 관심이 있습니다. 그러나 앞으로는 DomainClass 자체의 속성을 가진 < String, DomainClass의 Map 채우기에 흥미로울 것입니다.JSP의 Struts2 맵핑 항목에 대한 필드 이름

private Map<String,String> assetProps; 
... 
public Map<String, String> getAssetProps() { 
    return assetProps; 
} 

public void setAssetProps(Map<String, String> assetProps) { 
    this.assetProps = assetProps; 
} 

두 단계는 기본적으로,지도에 값을 설정하려면 - 다음과 같이

답변

3

나는 속성으로, 작업을해야합니다. 우선, OGNL은지도를 인스턴스화 할 수 없으므로 귀하에게 달려 있습니다. 내 행동에, 나는 Preparable 인터페이스를 구현하지만, 다음과 같이 ') (공공 문자열 입력'을 실행하기 전에 방법을 인스턴스화 -

public class EditAction extends ActionSupport implements Preparable { 
... 
    public void prepare() { 
     // just satisfying Preparable interface so we can have prepareInput() 

    } 

    public void prepareInput() throws Exception { 
     assetProps = new HashMap<String,String>(); 
    } 

을 이제 객체가 null가 아닌, 내가와 유사한 구문을 사용할 수 있습니다 JSP에서의 추종 -

<s:iterator value="asset.properties" var="prop"> 
    <sjx:textfield name="%{'assetProps[\\'' +#prop.propName +'\\']'}" 
      value="%{#prop.propValue}" 
      label="%{#prop.propName}" size="25"/> 
    </s:iterator> 

반복자는 스택에서 객체 세트를 가져 와서 반복합니다. 중요한 부분은 "name ="섹션이며 이중 이스케이프 처리 된 작은 따옴표가 있음을 알 수 있습니다. 그러면 페이지가 렌더링 될 때 input 요소의 이름이 assetProps [ 'Screen Size']가됩니다. 페이지가 제출되면 "public void execute()"메서드 내에서 assetProps가 완전히 채워집니다.

+0

감사합니다. 덕분에 비슷한 상황이 해결되었습니다. 한 쪽 메모, 당신은 실제로 이것을위한 준비 인터페이스가 필요하지 않습니다, 당신은 단지 선언 된 때지도를 초기화 할 수 있습니다. – shakerlxxv

2

다음은 누군가에게 도움이 될 수 있도록 유사한 작업을 수행하는 다른 코드입니다.

<s:iterator value="storageIds" var="sids"> 
    <s:hidden name="%{'storageIds[\\'' + key +'\\']'}" value="%{#sids.value}"/> 
</s:iterator> 

내 작업이있는 Map<String,String> 이름

storageIdsMap.Entry 속성에 대한지도, 키와 값 결의를 반복.

0

시도해보십시오. 나를 위해 완벽하게 작동

<s:iterator value="configMap" id="daa"> 
    <s:hidden name="%{'configMap[\\'' + key +'\\']'}" value="%{#daa.value}" /> 
</s:iterator>