从数据网格填充对话框

时间:2014-12-12 17:05:32

标签: jsf primefaces datagrid

解决方案

为了将此线程设置为已解决,请让我写下我更改的内容以使代码正常工作:

  • 将bean更改为@ViewScoped;
  • 更改Update =""的ID对于对话框表单的id;
  • 查找错误后(无法找到带有表达式的组件..."我已重新检查生成的HTML以确认ID,因为自动生成后它会更长。更换id后一切都很好。

感谢@Jaqen H' ghar的帮助:)


我有这个面板来更新给定的表列,我想使用一个对话框来填充每个列数据。

这是我的页面:

<h:form prependId="true" id="tableForm">
    <h:panelGrid columns="2" columnClasses="gridLabel, gridEntry">
        <h:outputText value="Table Name: " />
        <h:inputText value="#{updObj.title}" />
    </h:panelGrid>
    <p:dataTable var="column"
        value="#{tableBean.getTableColumns(updObj)}"
        id="columnsTable">

        <p:column headerText="Name">
            <h:outputText value="#{column.title}" />
        </p:column>
        <p:column headerText="Type">
            <h:outputText value="#{column.type}" />
        </p:column>
        <p:column headerText="Size">
            <h:outputText value="#{column.size}" />
        </p:column>
        <p:column headerText="Not null">
            <p:selectBooleanCheckbox value="#{column.notNull}" />
        </p:column>
        <p:column headerText="Primary key">
            <p:selectBooleanCheckbox value="#{column.primaryKey}" />
        </p:column>
        <p:column headerText="Edit column">
            <p:commandButton value="Edit column"
                actionListener="#{tableBean.personalmethod(column)}"
                update="updateColumnDialog:updateColumnGrid" icon="ui-icon-pencil"
                title="Edit this column"
                oncomplete="PF('updateColumnDialog').show();" />

        </p:column>

    </p:dataTable>


    <p:dialog id="updateColumnDialog" widgetVar="updateColumnDialog"
        header="Edit Column" height="200">

        <h:panelGrid columns="2" id="updateColumnGrid">

            <h:outputText value="Column name: " />
            <h:inputText id="updateColName"
                value="#{tableBean.updatedColumnName}" />
            <h:outputText value="Column type: " />
            <h:selectOneMenu id="updateSelectColumnTypes"
                value="#{tableBean.selectedColumnType}">
                <f:selectItems value="#{tableBean.columnTypes}"
                    var="columnType" itemLabel="#{columnType}"
                    itemValue="#{columnType}" id="updateSelectColumnType" />
            </h:selectOneMenu>
            <h:outputText value="Size: " />
            <p:spinner id="updateSize"
                value="#{tableBean.updatedColumnSize}" />

            <h:outputText value="Not null: " />
            <p:selectBooleanCheckbox id="updateNotNull"
                value="#{tableBean.updatedColumnNotNull}" />

            <h:outputText value="Primary Key: " />
            <p:selectBooleanCheckbox id="updatePrimaryKey"
                value="#{tableBean.updatedColumnPrimaryKey}" />
        </h:panelGrid>
    </p:dialog>
</h:form>

TableBean:

private String updatedColumnName = "";
private String updatedColumnType = "";
private double updatedColumnSize = 0.0;
private boolean updatedColumnNotNull = false;
private boolean updatedColumnPrimaryKey = false;
private List<String> columnTypes =  new ArrayList<String>();

public void personalmethod(ColumnDTO updateColumn) {
    this.setUpdatedColumnName(updateColumn.getTitle());
    this.setUpdatedColumnType(updateColumn.getType());
    this.setUpdatedColumnSize(updateColumn.getSize());
    this.setUpdatedColumnNotNull(updateColumn.isNotNull());
    this.setUpdatedColumnPrimaryKey(updateColumn.isPrimaryKey());
}

 public List<ColumnDto> getTableColumns(TableDTO contextTable) {
    List<ColumnDto> contextTableColumns = new ArrayList<ColumnDto>();

    for (ColumnDto myColumnDto: contextTable.getColumns().values()) {
        contextTableColumns.add(myColumnDto);
    }

    return contextTableColumns;
}

根据我的尝试:将ID放在对话框的数据网格上,例如<form:datagrid>@RequestScoped,但我只能弹出对话框,但表单全部为空白。

你能帮我弄清楚缺少什么吗?

亲切的问候,

萨姆

1 个答案:

答案 0 :(得分:0)

如h this article中所述,你应该在h:commandButton被触发时设置一个属性,并将其传递给对话框。

Jaqen H'ghar所述,我要么切换到@ViewScoped并使用两种不同的形式,将第二种形式放在对话框中。