JSF DataTable根据实体字段自动生成inputtext

时间:2019-05-18 05:27:49

标签: jsf primefaces datatable

  • 我想为实体对象的每个字段自动生成一系列输入文本。目标不仅是要显示,而且要能够编辑。因此,仅显示字段值不是我们想要的。

例如实体:

@Entity
public class EntityObject
{
   private String _value0 = "value0";
   private String _value1 = "value1";

   public String getValue0() {return _value0;}
   public void setValue0(String value0) {_value0 = value0;}

   public String getValue1() {return _value1;}
   public void setValue1(String value1) {_value1 = value1;}
}
  • 这是我们通常会编写的代码,如果我们在输入文本中每个字段一个一个地手动指示。我们想要的是摆脱它,而是自动生成它。
<p:datatable var="entity" value="#{bean.entities}">

   <p:column headername="Column0">
      <p:inputtext value="#{entity.value0}">
   </p:column>

   <p:column headername="Column1">
      <p:inputtext value="#{entity.value1}">
   </p:column>

</p:datatable>

托管bean是这样的非常基本的

@Named("bean")
public class TheBean
{
   private List<EntityObject> _entities = new LinkedList<>();

   public List<EntityObject> getEntities() {return _entities;}
   public void setEntities(List<EntityObject> entities) {_entities = entities;}

   @PostConstruct public void init()
   {
      _entities = Mock.generateEntities(5); //Imagine it could be a mock.
   }
}
  • 最后,我们想使用来自.xhtml文件而不是.java bean的尽可能多的标记和变量。
<p:datatable var="entity" value="#{bean.entities}">

   <p:columns var="field" value="#{entity.fields}">
      <p:inputText value="#{field}">
   </p:columns>

</p:datatable>
  • 当我们更改输入文本的值时,它实际上应该直接编辑实体对象的字段,就像我们直接手动将字段名称直接输入到输入文本中一样。

  • 实现我试图做到的最好方法是什么。我真的想最小化Java代码,因为我知道它可以通过Bean中的代码完全生成,但是事后很难维护代码了吗?

0 个答案:

没有答案