如何在h:dataTable中创建编辑按钮以使行可编辑

时间:2019-05-15 08:17:46

标签: jsf

我有一个HtmlDatatable,

  • 一个要编辑的命令按钮。
  • 一个要保存的命令按钮。
  • 一个InputText显示信息。
    <h:form>            
      <h:dataTable var="entity" value="#{bean.entities}">
        <h:column>
         <f:facet name="header">ColumnA</f:facet>
         <h:commandButton value="edit" actionListenner="#{bean.edit()}" />
         <hcommandButton value="save" actionListenner="#{bean.save(entity)} rendered="false"/>
         <h:inputText value="#{entity.value}"/>
         </h:column>
      </h:dataTable>            
    </h:form>

当我单击CommandButton编辑时,我想显示CommandButton保存。如何从Bean访问保存在我的方法edit()中的CommandButton?

  • 唯一的方法就是从按钮传递clientId。
  • 或者通过将对象本身作为EL的参数传递并直接在方法中使用它,还有其他方法吗? #{bean.edit(buttonSave)}
    public void edit()
    {
      //TODO get the button save from the same row as the button triggered.

      //TODO switch rendered to true.
    }

1 个答案:

答案 0 :(得分:1)

请勿尝试在edit()方法内访问保存的CommandButton。在您的实体中添加一个名为editMode之类的布尔属性,然后尝试将您的实体传递给这样的edit方法

<h:commandButton value="edit" actionListenner="#{bean.edit(entity)}" />

现在在您的edit()方法中,将您的实体添加为参数并在您的实体上启用编辑模式

public void edit(Entity entity)
{
    entity.setEditMode(true);
}

现在,EL可以使commandButton的渲染属性可以像这样检查实体的editMode

<h:commandButton value="edit" actionListenner="#{bean.edit(entity)}" rendered="#{!entity.editMode}"/>    
<h:commandButton value="save" actionListenner="#{bean.save(entity)}" rendered="#{entity.editMode}"/>

因此,如果editMode属性为true,则现在应该看到保存按钮。隐藏隐藏编辑按钮的方法相同