Премьер сталкивается с операциями CRUD - PullRequest
1 голос
/ 22 ноября 2011

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

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

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

Код указан ниже:

<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;
    }

}

Ответы [ 2 ]

2 голосов
/ 27 января 2012

Эти 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".
    }
}
1 голос
/ 27 января 2012

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

...