[英]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.