Java JSF:空嵌套数据表
我正在基于JSF为JBoss6.1编写自己的JMX控制台实现 托管bean有一部分代码:Java JSF:空嵌套数据表,java,jsf,jboss,datatable,Java,Jsf,Jboss,Datatable,我正在基于JSF为JBoss6.1编写自己的JMX控制台实现 托管bean有一部分代码: @ManagedBean @SessionScoped public class InspectionBean implements Serializable { private MBeanInfo data; private List<OperationWrapper> operations; public void setInitData(MBeanInfo da
@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
}
这是一个问题页面的代码:
<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>
活动
#{operation.name}
返回值
#{operation.returnType}
描述
#{operation.description}
参数
#{param.name}
#{param.type}
#{param.description}
显示页面的这一部分时,如下所示:
所以嵌套的数据表中没有文本
正如您所看到的,表格位于它们应该位于的位置。还有文本单元格。而且数量合适。但是文本在哪里呢
调试没有结果。列表中填写了正确的数据
怎么了?如何修复此问题?罪魁祸首在嵌套表标记的
var
属性中:
#{param.name}
...
#{param}
是一个保留的EL变量名,它引用了由获取的请求参数映射。例如,page.xhtml?id=123
在使用{param.id}
时将给出打印123
。您可以也不应该覆盖它
给它一个不同的名字。例如,var=“signature”
和{signature.name}
等
另见:
var
属性中:
#{param.name}
...
#{param}
是一个保留的EL变量名,它引用了由获取的请求参数映射。例如,page.xhtml?id=123
在使用{param.id}
时将给出打印123
。您可以也不应该覆盖它
给它一个不同的名字。例如,var=“signature”
和{signature.name}
等
另见:
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>