繁体   English   中英

JSF:空的嵌套数据表

[英]JSF: Empty nested dataTable

我正在为基于JSF的JBoss 6.1编写自己的JMX控制台实现。

有一部分托管bean的代码:

@ManagedBean
@SessionScoped
public class InspectionBean implements Serializable {
    private MBeanInfo data; 
    private List<OperationWrapper> operations;

    public void setInitData(MBeanInfo data) {
        this.data = data;   
        initOperations();
    }

    public List<MBeanOperation> getOperations() {
        return operations;
    }

    public void setOperations(List<MBeanOperation> list) {
        operations = list;
    }

    private void initOperations() {
        operations = new ArrayList<MBeanOperation>();

        for (MBeanOperationInfo opInfo : data.getOperations()) {
            OperationWrapper opWrapper = new OperationWrapper();

            opWrapper.setName(opInfo.getName());
            opWrapper.setDescription(opInfo.getDescription());
            opWrapper.setReturnType(opInfo.getReturnType());

            List<ParameterWrapper> paramList = 
                    new ArrayList<ParameterWrapper>(); 

            for (MBeanParameterInfo paramInfo : opInfo.getSignature()) {
                ParameterWrapper paramWrapper = 
                        new ParameterWrapper();

                paramWrapper.setName(paramInfo.getName());
                paramWrapper.setDescription(paramInfo.getDescription());
                paramWrapper.setType(paramInfo.getType());
                paramWrapper.setValue("");

                paramList.add(paramWrapper);
            }

            mBeanOp.setSignature(paramList);

            operations.add(mBeanOp);
        }
    }

    //some other code
}

OperationWrapper类代码:

public class OperationWrapper implements Serializable {
    private String name;
    private String returnType;
    private List<ParameterWrapper> signature; 
    private String description;

    //other getters and setters

    public List<ParameterWrapper> getSignature() {
        return signature;
    }

    public void setSignature(List<ParameterWrapper> signature) {
        this.signature = signature;
    }   
}

ParameterWrapper类代码:

public class ParameterWrapper implements Serializable {
    private String name;
    private String type;
    private String description;
    private String value;

    //simple getters and setters
}

这是问题页面的代码:

<h:dataTable value="#{inspectionBean.operations}" var="operation"
        border="1" width="100%" cellpadding="5"
        style="border-style: solid; border-collapse: collapse;">
    <h:column>
        <f:facet name="header">Operation</f:facet>
        #{operation.name}
    </h:column>

    <h:column>
        <f:facet name="header">Return Value</f:facet>
        #{operation.returnType}
    </h:column>

    <h:column>
        <f:facet name="header">Description</f:facet>
        #{operation.description}
    </h:column>

    <h:column>
        <f:facet name="header">Parameters</f:facet>

        <h:form>
            <h:dataTable value="#{operation.signature}" var="param"
                    rendered="#{not empty operation.signature}"
                    border="1" width="100%"
                    style="border-style: solid; border-collapse: collapse;">
                <h:column>
                    #{param.name}
                </h:column>

                <h:column>
                    #{param.type}
                </h:column>

                <h:column>
                    #{param.description}
                </h:column>

                <h:column>
                    <h:inputText value="#{param.value}" size="20"/>
                </h:column>
            </h:dataTable>

            <a4j:commandButton value="Invoke" 
                    action="#{inspectionBean.invokeOperation(operation)}" 
                    render="@none"/>
        </h:form>
    </h:column>  
</h:dataTable>

当页面的此部分显示时,如下所示: 示例页面 因此,嵌套的dataTables中没有文本!

如您所见,表格位于应放置的位置。 还有用于文本的单元格。 并且数量合适。 但是文字在哪里?

调试没有结果。 列表中填充了正确的数据。

怎么了? 我怎样才能解决这个问题?

罪魁祸首是嵌套表标记的var属性:

<h:dataTable value="#{operation.signature}" var="param" ...>
    <h:column>
        #{param.name}
    </h:column>
    ...

#{param}是保留的EL变量名,它引用由ExternalContext#getRequestParameterMap()获得的请求参数映射。 例如,使用#{param.id}时, page.xhtml?id=123将显示123 您可以并且不应覆盖它。

给它起一个不同的名字。 例如var="signature"#{signature.name}等。

也可以看看:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM