为什么 primefaces 数据表无法访问包含列表 <Object> 的列表<Object> 中的变量
Why the primfaces datatable cant access the variable in a list<Object> that contains a list<Object>
我的错误是我无法从数据表的列中的 class 部分访问变量
public class Blueprint implements Serializable {
private String name;
private List<Part> parts;
public Blueprint(String name, List<Part> parts) {
this.name = name;
this.parts = parts;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Part> getParts() {
return parts;
}
public void setParts(List<Part> parts) {
this.parts = parts;
}
public class Part implements Serializable{
public Part(String name, Integer amount) {
this.name = name;
this.amount = amount;
}
public String name;
public Integer amount;
public String getName() {
System.out.println(name);
return name;
}
public void setName(String _Name) {
this.name = _Name;
}
public Integer getAmount() {
return amount;
}
public void setAmoung(Integer _Amount) {
this.amount = _Amount;
}
<p:panelGrid columns="1">
<p:dataTable id ="BlueprintList" value="#{Blueprints.blueprints}" var="blueprint" rowKey="#{blueprint.name}" selectionMode="single" selection="#{Blueprints.selectedPart}">
<p:column style="width:16px">
<p:rowToggler />
</p:column>
<p:column headerText="Name">
<p:outputLabel value="#{blueprint.name}"/>
</p:column>
<p:rowExpansion>
<p:panelGrid columns="1" >
<p:dataTable value="#{blueprint.parts}" var="a">
<p:column headerText="Name>
<p:outputLabel value="#{a}" />
</p:column>
<p:column headerText="Anzahl">
<p:outputLabel value="#{a}"/>
</p:column>
</p:dataTable>
</p:panelGrid>
</p:rowExpansion>
</p:dataTable>
问题是当我想通过 var a 访问名称和数量时它没有显示,如果我手动编写它,它不起作用。
我希望有人能帮助我。谢谢
对于外部数据表,selection="..." 子句需要引用蓝图,因为 value="..." 子句是蓝图列表。要获得所选部分,您还需要在内部数据表中包含选择子句。
在使用变量 {a} 的地方,您应该能够像 #{a.name} 和 #{a.amount} 中那样包含字段名称。您没有说明您使用的是哪个版本的 Primefaces 或什么开发工具,但在我的 NetBeans v12.2 版本中,Netbeans 在这种情况下不会自动执行字段名称查找。我只需要手动输入,忽略警告三角。
我在使 selectedPart 工作时遇到问题,可能是因为我的页面上没有用于提交表单的命令按钮。我用 p:ajax 标签解决了它。
这是我的版本。我在 Wildfly 21 上使用 Primefaces 8、运行 并使用 Java 11.
对其进行了测试
<h:form>
<p:dataTable id ="BlueprintList" value="#{rowExpansionController.blueprints}"
var="blueprint"
rowKey="#{blueprint.name}"
selectionMode="single" selection="#{rowExpansionController.selectedBlueprint}"
rowExpandMode="single">
<p:ajax event="rowSelect" listener="#{rowExpansionController.rowSelectBlueprint}" />
<p:column style="width:16px">
<p:rowToggler />
</p:column>
<p:column headerText="Name">
#{blueprint.name}
</p:column>
<p:rowExpansion>
<p:dataTable value="#{blueprint.parts}" var="part"
rowKey="#{part.name}" selectionMode="single"
selection="#{rowExpansionController.selectedPart}">
<p:ajax event="rowSelect" listener="#{rowExpansionController.rowSelectPart}" />
<p:column headerText="Name">
#{part.name}
</p:column>
<p:column headerText="Amount">
#{part.amount}
</p:column>
</p:dataTable>
</p:rowExpansion>
</p:dataTable>
</h:form>
我的错误是我无法从数据表的列中的 class 部分访问变量
public class Blueprint implements Serializable {
private String name;
private List<Part> parts;
public Blueprint(String name, List<Part> parts) {
this.name = name;
this.parts = parts;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Part> getParts() {
return parts;
}
public void setParts(List<Part> parts) {
this.parts = parts;
}
public class Part implements Serializable{
public Part(String name, Integer amount) {
this.name = name;
this.amount = amount;
}
public String name;
public Integer amount;
public String getName() {
System.out.println(name);
return name;
}
public void setName(String _Name) {
this.name = _Name;
}
public Integer getAmount() {
return amount;
}
public void setAmoung(Integer _Amount) {
this.amount = _Amount;
}
<p:panelGrid columns="1">
<p:dataTable id ="BlueprintList" value="#{Blueprints.blueprints}" var="blueprint" rowKey="#{blueprint.name}" selectionMode="single" selection="#{Blueprints.selectedPart}">
<p:column style="width:16px">
<p:rowToggler />
</p:column>
<p:column headerText="Name">
<p:outputLabel value="#{blueprint.name}"/>
</p:column>
<p:rowExpansion>
<p:panelGrid columns="1" >
<p:dataTable value="#{blueprint.parts}" var="a">
<p:column headerText="Name>
<p:outputLabel value="#{a}" />
</p:column>
<p:column headerText="Anzahl">
<p:outputLabel value="#{a}"/>
</p:column>
</p:dataTable>
</p:panelGrid>
</p:rowExpansion>
</p:dataTable>
问题是当我想通过 var a 访问名称和数量时它没有显示,如果我手动编写它,它不起作用。
我希望有人能帮助我。谢谢
对于外部数据表,selection="..." 子句需要引用蓝图,因为 value="..." 子句是蓝图列表。要获得所选部分,您还需要在内部数据表中包含选择子句。
在使用变量 {a} 的地方,您应该能够像 #{a.name} 和 #{a.amount} 中那样包含字段名称。您没有说明您使用的是哪个版本的 Primefaces 或什么开发工具,但在我的 NetBeans v12.2 版本中,Netbeans 在这种情况下不会自动执行字段名称查找。我只需要手动输入,忽略警告三角。
我在使 selectedPart 工作时遇到问题,可能是因为我的页面上没有用于提交表单的命令按钮。我用 p:ajax 标签解决了它。
这是我的版本。我在 Wildfly 21 上使用 Primefaces 8、运行 并使用 Java 11.
对其进行了测试<h:form>
<p:dataTable id ="BlueprintList" value="#{rowExpansionController.blueprints}"
var="blueprint"
rowKey="#{blueprint.name}"
selectionMode="single" selection="#{rowExpansionController.selectedBlueprint}"
rowExpandMode="single">
<p:ajax event="rowSelect" listener="#{rowExpansionController.rowSelectBlueprint}" />
<p:column style="width:16px">
<p:rowToggler />
</p:column>
<p:column headerText="Name">
#{blueprint.name}
</p:column>
<p:rowExpansion>
<p:dataTable value="#{blueprint.parts}" var="part"
rowKey="#{part.name}" selectionMode="single"
selection="#{rowExpansionController.selectedPart}">
<p:ajax event="rowSelect" listener="#{rowExpansionController.rowSelectPart}" />
<p:column headerText="Name">
#{part.name}
</p:column>
<p:column headerText="Amount">
#{part.amount}
</p:column>
</p:dataTable>
</p:rowExpansion>
</p:dataTable>
</h:form>