如何填充 Struts2 下拉菜单?

How to populate Struts2 dropdown menu?

我正在使用 Struts2 并尝试使用 <s:select> 标记填充下拉列表,但由于某种原因我在下拉列表中看不到任何内容。在后端列表 wsAuditConfig 中填充了值,但它没有显示在下拉列表中。

动作

private List<String> wsAuditConfig;

public void prepare() throws Exception {
    AppConfigClient appConfigClient = ( AppConfigClient ) AppContext.getBean( Constants.SPRING_BEAN_CMS_APP_CONFIG_CLIENT );
    String appCode = ( String ) System.getProperty( Constants.SPRING_BEAN_EIS_APP_CODE );

    List<AppConfig> list = new ArrayList<>();
    wsAuditConfig = new ArrayList<>();

    GetAppConfigServiceRequest request = appConfigClient.getGetAppConfigServiceRequest();
    request.setParameters( appConfigClient.getAppConfigRequestParameters( appCode, null ) );
    request.setAccepts( ContentType.JSON );

    GetAppConfigServiceResponse response = appConfigClient.get( request );
    if( response != null && response.getEntity() != null ) {
        list = response.getEntity().getConfig();
        for( AppConfig appConfig : list ) {
            if( appConfig.getConfigCode().equals( Constants.APP_WS_AUDIT_CONFIG ) ) {
                wsAuditConfig.add( appConfig.getKeyName1() );
            }
        }
    }
    this.records = new ArrayList<>();
}

JSP

<s:form action="viewWSAuditXml" namespace="/eismain/cmswsaudit/view" name="wsAudit">
    <s:select name="wsName" headerValue="" headerKey="" list="wsAuditConfig" listKey="wsName" listValue="wsName" key="ws.audit.view.select" onchange="wsAudit.submit();" cssStyle="min-width: 220px;"/>
</s:form>

什么是wsName?由于您有如下所示的字符串更改 select 列表并且它可以工作。

<s:select name="wsName" headerValue="" headerKey="" list="wsAuditConfig"   onchange="wsAudit.submit();" cssStyle="min-width: 220px;"/>

下拉列表应该在 prepare() 方法中填充,为此操作 class 应该实现 Preparable 并且在操作配置中应该有 prepare 拦截器。

需要 getter

private List<String> wsAuditConfig;
public List<String> getWsAuditConfig() { return wsAuditConfig; }

由于它是一个字符串列表,因此列表的元素没有键或值属性。所以它可以在没有 listKeylistValue.

的情况下使用
<s:form action="viewWSAuditXml" namespace="/eismain/cmswsaudit/view" name="wsAudit">
    <s:select name="wsName" headerValue="" headerKey="" list="wsAuditConfig" key="ws.audit.view.select" onchange="wsAudit.submit();" cssStyle="min-width: 220px;"/>
</s:form>

如果您想在下拉列表中列出对象,您应该使用类型列表,并且提供的键和值类似于 this 答案中的方式。