Я создаю приложение jsf, и мне нужно выполнить CRUD. До сих пор мне удавалось удалять, создавать и читать, но я не смог обновить запись. Поэтому моя проблема заключается в том, что, когда пользователь нажимает кнопку обновления, открывается диалоговое окно с информацией о выбранной строке и обновляется информация , Вот мой пример кода.Обновление выбранной строки в datatable в jsf
<p:panelGrid columns="2">
<h:outputLabel value="Account Id"/>
<h:inputText value="#{accCtr.acc.accountNum}" />
<h:outputLabel value="Account Bal"/>
<h:inputText value="#{accCtr.acc.balance}"/>
<h:outputLabel />
<p:commandButton action="#{accCtr.create()}" value="Enter" update="dt"/>
</p:panelGrid>
<p:dataTable value="#{accCtr.list}" var="i" id="dt" style="width: 40%;" rowStyleClass="height" rowKey="#{accCtr.acc.accountNum}" >
<p:column>
<f:facet name="header">Account Num</f:facet>
#{i.accountNum}
</p:column>
<p:column>
<f:facet name="header">Account Balance</f:facet>
#{i.balance}
</p:column>
<p:column>
<f:facet name="header">Action</f:facet>
<p:commandButton value="Remove" styleClass="height"
action="#{accCtr.removeAccount(i)}"
/>
<p:commandButton value="Edit" styleClass="height"
onclick="pop.show()"
action="#{accCtr.edit(i)}"
>
</p:commandButton>
</p:column>
</p:dataTable>
</h:form>
<p:dialog widgetVar="pop" header="Account Edit">
<h:form>
<p:panelGrid columns="2">
<h:outputLabel value="Account Balance"/>
<h:inputText value="#{accCtr.acc.balance}"/>
<h:outputLabel/>
<p:commandButton value="Update"/>
</p:panelGrid>
</h:form>
</p:dialog>
может кто-то помочь мне. и мой бэк-бэк.
@ManagedBean(name="accCtr")
@SessionScoped
public class AccountController {
List<AccountTable> list=new ArrayList<>();
public AccountController() {
}
private Account_dao getDao()
{
return new Account_dao();
}
public List<AccountTable> getList() {
return getDao().findAll();
}
public void setList(List<AccountTable> list) {
this.list = list;
}
public void removeAccount(AccountTable acc) {
getDao().remove(acc);
}
public AccountTable acc=new AccountTable();
public AccountTable getAcc() {
return acc;
}
public void setAcc(AccountTable acc) {
this.acc = acc;
}
public void edit(AccountTable acc) {
setAcc(acc);
}
public String create()
{
this.acc.setUserid(10);
getDao().create(this.acc);
return "index";
}
Ваш метод создания выглядит так неправильно, я имею в виду его первую строку. И ваш метод редактирования является неполным. В datatable есть атрибут под названием selection и selectionMode, который вы можете использовать для привязки к выбранному объекту в вашем фоновом бэкэнде. Http://www.primefaces.org/showcase/ui/data/datatable/selection.xhtml –
@ Sujan метод create работает правильно. Я могу вставить запись – MorganM
Вы жестко кодируете идентификатор пользователя, делаете ли вы это для целей тестирования? –