gpt4 book ai didi

java - JSF:空嵌套数据表

转载 作者:行者123 更新时间:2023-11-30 07:27:21 27 4
gpt4 key购买 nike

我正在基于 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>

当页面的这一部分显示时,它看起来像这样: Example page所以嵌套数据表中没有文本!

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

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

怎么了?我该如何解决这个问题?

最佳答案

罪魁祸首在嵌套表格标记的 var 属性中:

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

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

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

另见:

关于java - JSF:空嵌套数据表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9776773/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com