Это снова,ActionListener не работает должным образом с ViewScope?
У меня есть эта проблема, так как переключатель с использованием action
до actionListener
. Это странная проблема, и я не знаю, почему это произошло.
Когда я попытался удалить элемент из таблицы данных PrimeFaces, Я получу NullPointerException. Но, если я сначала отредактирую этот элемент, а затем вернусь, чтобы удалить, все будет хорошо !?
Я использую actionListener для использования Ajax в JSF. Когда я использовал действие, он все еще работал правильно.
JSF Page
<p:commandButton id="editButton" icon="ui-icon-pencil"
value="#{appBundle.Edit}"
action="detail.xhtml?faces-redirect=true">
<f:setPropertyActionListener value="#{a}"
target="#{academicManagedBean.academicSelected}"/>
</p:commandButton>
<p:commandButton id="deleteButton" icon="ui-icon-trash"
value="#{appBundle.Delete}"
actionListener="#{academicManagedBean.delete}"
update=":growl,datalist">
<p:confirm header="Confirmation" message="Are you sure?" icon="ui-icon-alert" />
<f:setPropertyActionListener value="#{a}"
target="#{academicManagedBean.academicSelected}" />
</p:commandButton>
<p:confirmDialog global="true" showEffect="fade" hideEffect="explode">
<p:commandButton value="Yes" type="button"
styleClass="ui-confirmdialog-yes" icon="ui-icon-check"/>
<p:commandButton value="No" type="button"
styleClass="ui-confirmdialog-no" icon="ui-icon-close"/>
</p:confirmDialog>
Managed Bean Class
@ManagedBean
@ViewScoped
public class AcademicManagedBean extends TblAcademic implements Serializable {
private List<TblAcademic> all;
private static TblAcademic academicSelected;
public AcademicManagedBean() {
super();
}
public List<TblAcademic> getAll() {
try {
all = new com.rdb.bll.AcademicBLL().getAll();
return all;
} catch (Exception ex) {
Logger.getLogger(AcademicManagedBean.class.getName()).log(Level.SEVERE, null, ex);
return null;
}
}
public void add(ActionEvent actionEvent) throws Exception {
boolean check = new com.rdb.bll.AcademicBLL().add(this);
if (check) {
JsfUtil.addSuccessMessage("Congratulation, new student has been added successfully!");
} else {
JsfUtil.addErrorMessage(ResourceBundle.getBundle("com.rdb.service.AppBundle").getString("PersistenceErrorOccured"));
}
}
public void update(ActionEvent actionEvent) throws Exception {
boolean check = new com.rdb.bll.AcademicBLL().update(AcademicManagedBean.academicSelected);
if (check) {
JsfUtil.addSuccessMessage("Congratulation, student has been updated successfully!");
} else {
JsfUtil.addErrorMessage(ResourceBundle.getBundle("com.rdb.service.AppBundle").getString("PersistenceErrorOccured"));
}
}
public void delete(ActionEvent actionEvent) throws Exception {
boolean check = new com.rdb.bll.AcademicBLL().delete(AcademicManagedBean.academicSelected);
if (check) {
JsfUtil.addSuccessMessage("Congratulation, student has been deleted successfully!");
} else {
JsfUtil.addErrorMessage(ResourceBundle.getBundle("com.rdb.service.AppBundle").getString("PersistenceErrorOccured"));
}
}
public String studentDetail() {
TblStudent std = new com.rdb.bll.StudentBLL().getById(AcademicManagedBean.academicSelected.getStudentRollNo());
new StudentManagedBean().setStudentSelected(std);
return "/backend/student/detail.xhtml?faces-redirect=true";
}
public String getClassNameById(int classId) {
TblClass objClass = new com.rdb.bll.ClassBLL().getById(classId);
return objClass.getClassName();
}
public TblAcademic getAcademicSelected() {
return academicSelected;
}
public void setAcademicSelected(TblAcademic academicSelected) {
AcademicManagedBean.academicSelected = academicSelected;
}
ли я сделать что-нибудь не так? Пожалуйста, помогите мне сделать это правильно, спасибо.
не понимаю. Внутри страницы подробностей или добавления новой страницы я тоже использую 'actionListener', и он все еще работает нормально. Во всяком случае, ваше решение решило мою проблему. Спасибо вам. –
Если это помогло, то примите это как ответ. – Makky