Я использую пригодные для использования типы поверхностей. В событии rowSelect я вызываю listener onRowSelect, где я назначаю выбранную строку на две переменные объекта, например, selectedRow и editRow.Переменные объектов имеют одно и то же значение eventhoug изменяется только одна переменная объекта
Когда пользователь нажимает кнопку «Редактировать», входы вносятся в переменные объекта editRow, а при обновлении значений в bean-файле измененная переменная имеет одинаковое значение как в объектах «selectedRow», так и «editRow».
Класс модели выглядит следующим образом.
public class SalesMen {
private int salesMen_id;
private String salesMen_email1;
public SalesMen() {
}
public int getSalesMen_id() {
return salesMen_id;
}
public void setSalesMen_id(int salesMen_id) {
this.salesMen_id = salesMen_id;
}
public String getSalesMen_email1() {
return salesMen_email1;
}
public void setSalesMen_email1(String salesMen_email1) {
this.salesMen_email1 = salesMen_email1;
}
}
Моего Xhtml что просматривать продавец детали следующим образом.
<ui:define name="contentPanel">
<div style="margin-bottom: 10px; margin-top: 10px">
<p:growl id="growl" showDetail="true"/>
<h:form id="form1">
<div class="w3-margin-top">
<h:commandButton type="cmdAdd" action="frmSalesMenAdd.xhtml?faces-redirect=true" value="Add" />
<h:outputText value=" "/>
<h:commandButton type="cmdEdit" action="frmSalesMenEdit.xhtml?faces-redirect=true" value="Edit" disabled="#{salesMenBean.selectedSalesMen eq null}" />
<h:outputText value=" "/>
</div>
</h:form>
<div>
<h:form id="frmDgvBanking">
<p:dataTable id ="dgvBanking"
var = "dtBanking"
value="#{salesMenBean.salesMens}"
selectionMode="single"
selection="#{salesMenBean.selectedSalesMen}"
rowKey="#{dtBanking.salesMen_id}"
scrollable="true"
resizableColumns="true"
scrollHeight="450"
scrollRows="50"
scrollWidth="100%"
widgetVar="SaleMen Table">
<p:ajax event="rowSelect" listener="#{salesMenBean.onRowSelect}" update=":form1 :frmDgvBanking :growl :frmDgvBanking:dgvBanking "/>
<p:column headerText="SalesMenEmail" >
<h:outputText value="#{dtBanking.salesMen_email1}" />
</p:column>
</p:dataTable>
</h:form>
</div>
</div>
</ui:define>
При нажатии кнопки «Изменить» выполняется следующий Xhtml.
<ui:define name="contentPanel">
<div style="margin: auto; width: 60%">
<p:growl id="growl" showDetail="true"/>
<h:form id="form1">
<p:panelGrid id="pg" columns="2">
<p:outputLabel for="txtEmail" value="Email id:"/>
<p:inputText id="txtEmail" value="#{salesMenBean.editSalesMen.salesMen_email1}" />
</p:panelGrid>
<h:commandButton id="cmdSave" action="#{salesMenBean.UpdateSalesMen(salesMenBean.editSalesMen)}" value="Save" />
</h:form>
</div>
</ui:define>
ПродавцыСид заключается в следующем.
@SessionScoped
@Named("salesMenBean")
public class SalesMenBean implements Serializable {
private SalesMen salesmen;
private List<SalesMen> salesMens;
private SalesMen selectedSalesMen;
private SalesMen editSalesMen;
public SalesMenBean() {
salesmen = new SalesMen();
}
public List<SalesMen> getSalesMens() {
salesMens = loadSalesMenListFromDb();
return salesMens;
}
public void setSalesMens(List<SalesMen> salesMens) {
this.salesMens = salesMens;
}
private List<SalesMen> loadSalesMenListFromDb() {
List<SalesMen> list = new ArrayList<>();
... reading values from table and adding to list
return list;
}
public void onRowSelect(SelectEvent event) {
selectedSalesMen = ((SalesMen) event.getObject());
editSalesMen = ((SalesMen) event.getObject());
FacesMessage msg = new FacesMessage(selectedSalesMen.getSalesMen_Name());
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, msg);
}
public String UpdateSalesMen(SalesMen editSm) {
System.out.println("Selected Salesmen email id is " + this.selectedSalesMen.getSalesMen_email1());
System.out.println("Edited Salesmen email id is " + editSm.getSalesMen_email1());
// The values above printed are same.
// I expect the editSm.getSalesMen_email1 should have the new value entered in the edit xhtml and selectedSalesMen.getSalesMen_email1 should hold the old value. But not happening
.... other updating codes are here
}
Будет ли кто-то поможет мне, почему selectedRow и EditRow объектов переменных получить одинаковые значения Eventhough я редактировать только EditRow объект переменных (salesMenBean.editSalesMen.salesMen_email1).
спасибо.
Спасибо всем. Я понял причину ошибки (ссылка на объект передается только). Ссылка, приведенная в разделе «Этот вопрос уже имеет ответ здесь:« Кажется, у меня нет ответа на мой вопрос или я ничего не прошу от него? ». На данный момент я использовал конструктор копирования для удовлетворения моих требований. Еще раз, спасибо. –