Prime сталкивается с операциями CRUD

Я пытаюсь выполнить операцию вставки в таблицу. Я показываю существующие записи в таблице данных, а подробности отображаются в PanelGrid под таблицей данных при выборе каждой строки. PanelGrid с пустым полем inputText отображаются, когда пользователь нажимает кнопку NEW. Пользователь отправляет новую запись, и dataTable обновляется.

При отправке получаю ошибку:

22 ноября 2011 г. 17:02:22 com.sun.faces.lifecycle.ProcessValidationsPhase выполнить ПРЕДУПРЕЖДЕНИЕ: ошибка аргумента: параметр targetClass имеет значение null java.lang.NullPointerException: ошибка аргумента: параметр targetClass имеет значение null

Код приведен ниже:

<p:outputPanel header="MyTable Records" rendered="true" id="panel_MyTable">         
    <p:dataTable id="table_MyTable" value="#{myBean.records}" var="dataMyTable" onRowSelectUpdate="details_MyTable" selection="#{myBean.currentRec}" update="submitButton">
         <p:column>
               <f:facet name="header">
                    <h:outputLabel value="Label 1" />
               </f:facet>
               <h:outputLabel value="#{dataMyTable.Field1}"/>
         </p:column>

         <p:column>
             <f:facet name="header">
                 <h:outputLabel value="Label 2" />
             </f:facet>
             <h:outputLabel value="#{dataMyTable.Field2}"/>
         </p:column>

         <f:facet name="footer">
               <p:commandButton value="New"  image="ui-icon ui-icon-add" actionListener="#{myBean.prepareForInsertAction}" update="details_myTable,submitButton" />
         </f:facet>
  </p:dataTable>
</p:outputPanel>



<h:panelGrid id="details_MyTable">
    <h:outputLabel value="Label 1"/>
        <p:inputText readonly="#{myBean.editMode ? false : true}" value="#{myBean.editMode ? myBean.newRec.Field1 : myBean.currentRec.Field1}" />
        <h:outputLabel value="Label 2"/>
        <p:inputText readonly="#{myBean.editMode ? false : true}" value="#{myBean.editMode ? myBean.newRec.Field2 : myBean.currentRec.Field2}" />
</h:panelGrid>

<p:commandButton id="submitButton" actionListener="#{myBean.createAction}" value="Submit" update="table_MyTable,details_MyTable" rendered="#{myBean.editMode ? true : false}"/>




@ManagedBean(name="myBean")
@ViewScoped
public class MyBean
{
    public static List<MYTABLE> records;
    MYTABLE currentRec;
    Boolean editMode=false;

    public MyBean(){
        records = MYTABLE_CRUD.getAllRecs();
        currentRec = new MYTABLE();
    }

    public void prepareForInsertAction(){
        newRec = new MYTABLE();
        editMode = true;
    }
    public void setCurrentRec(MYTABLE v_currentRec) {
        this.currentRec = v_currentRec;
        editMode = false;
    }

}

person rags    schedule 22.11.2011    source источник


Ответы (2)


Эти атрибуты value неверны:

<p:inputText readonly="#{myBean.editMode ? false : true}" value="#{myBean.editMode ? myBean.newRec.Field1 : myBean.currentRec.Field1}" />
<p:inputText readonly="#{myBean.editMode ? false : true}" value="#{myBean.editMode ? myBean.newRec.Field2 : myBean.currentRec.Field2}" />

Эти значения можно получить, но нельзя установить новые значения. Будет работать следующий синтаксис:

<p:inputText readonly="#{!myBean.editMode}" value="#{myBean[myBean.editMode ? 'newRec' : 'currentRec'].Field1}" />
<p:inputText readonly="#{!myBean.editMode}" value="#{myBean[myBean.editMode ? 'newRec' : 'currentRec'].Field2}" />

(обратите внимание, что я также улучшил оценку атрибута readonly)

Но гораздо лучше использовать только одно и то же свойство для обоих режимов редактирования и использовать значение режима редактирования в методе действия, чтобы определить, как с ним поступить:

<p:inputText readonly="#{!myBean.editMode}" value="#{myBean.rec.Field1}" />
<p:inputText readonly="#{!myBean.editMode}" value="#{myBean.rec.Field2}" />

с напр.

private Record rec;

public void save() {
    if (editMode) {
        // Treat "rec" as "currentRec".
    } else {
        // Treat "rec" as "newRec".
    }
}
person BalusC    schedule 27.01.2012
comment
Пожалуйста. Помогло ли это в решении вашей конкретной проблемы? - person BalusC; 30.01.2012

Наличие Single PanelGrid и его использование для просмотра данных строки таблицы, а также для принятия новых сведений о записи от пользователя на основе динамической привязки значений inputTexts в panelGrid вызывает проблему. Итак, я начал использовать две панели PanelGrid, одну для просмотра существующих данных строки таблицы, а другую для приема новых данных записи от пользователя.

person rags    schedule 27.01.2012