Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 ActionListener与ViewScope不能正常工作?_Jsf 2_Primefaces - Fatal编程技术网

Jsf 2 ActionListener与ViewScope不能正常工作?

Jsf 2 ActionListener与ViewScope不能正常工作?,jsf-2,primefaces,Jsf 2,Primefaces,又是我 自从使用action切换到actionListener后,我遇到了这个问题。这是一个奇怪的问题,我不知道为什么会发生 当我试图从PrimeFaces数据表中删除一项时,我将得到NullPointerException。但是,如果我先编辑那个项目,然后再回来删除,就可以了 我使用actionListener在JSF中使用Ajax。当我使用动作时,它仍然正常工作 JSF页面 <p:commandButton id="editButton" icon="ui-icon-pencil"

又是我

自从使用
action
切换到
actionListener
后,我遇到了这个问题。这是一个奇怪的问题,我不知道为什么会发生

当我试图从PrimeFaces数据表中删除一项时,我将得到NullPointerException。但是,如果我先编辑那个项目,然后再回来删除,就可以了

我使用actionListener在JSF中使用Ajax。当我使用动作时,它仍然正常工作

JSF页面

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

托管Bean类

@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;
    }
@ManagedBean
@视域
公共类AcademicManagedBean扩展TblAcademic实现可序列化{
私人名单所有;
选择专用静态TblAcademic;
公共学术管理bean(){
超级();
}
公共列表getAll(){
试一试{
all=new com.rdb.bll.AcademicBLL().getAll();
全部归还;
}捕获(例外情况除外){
Logger.getLogger(AcademicManagedBean.class.getName()).log(Level.SEVERE,null,ex);
返回null;
}
}
public void add(ActionEvent ActionEvent)引发异常{
布尔检查=new com.rdb.bll.AcademicBLL().add(this);
如果(检查){
addSuccessMessage(“恭喜,新学生添加成功!”);
}否则{
JsfUtil.addErrorMessage(ResourceBundle.getBundle(“com.rdb.service.AppBundle”).getString(“persistenceErrorOccursed”);
}
}
公共无效更新(ActionEvent ActionEvent)引发异常{
布尔检查=new com.rdb.bll.AcademicBLL().update(AcademicManagedBean.academicSelected);
如果(检查){
addSuccessMessage(“恭喜,学生已成功更新!”);
}否则{
JsfUtil.addErrorMessage(ResourceBundle.getBundle(“com.rdb.service.AppBundle”).getString(“persistenceErrorOccursed”);
}
}
public void delete(ActionEvent ActionEvent)引发异常{
布尔检查=new com.rdb.bll.AcademicBLL().delete(AcademicManagedBean.academicSelected);
如果(检查){
addSuccessMessage(“恭喜,学生已成功删除!”);
}否则{
JsfUtil.addErrorMessage(ResourceBundle.getBundle(“com.rdb.service.AppBundle”).getString(“persistenceErrorOccursed”);
}
}
公共字符串studentDetail(){
TblStudent std=new com.rdb.bll.StudentBLL().getById(AcademicManagedBean.academicSelected.getStudentRollNo());
new StudentManagedBean().setStudentSelected(标准);
return“/backend/student/detail.xhtml?faces redirect=true”;
}
公共字符串getClassNameById(int classId){
TblClass objClass=new com.rdb.bll.ClassBLL().getById(classId);
返回objClass.getClassName();
}
公共TblAcademic GetAcademic选定(){
返回已选择的项目;
}
已选择公共学院(TblAcademic学院已选择){
AcademicManagedBean.academicSelected=academicSelected;
}
我做错什么了吗?请帮我纠正一下,谢谢

<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>
不要忘记删除ActionEvent参数:

public void delete() {  
    // ...
}

这是从JSF大师Balcus在这里发布的答案中摘录的

我不明白。在详细信息页面或添加新页面中,我也在使用
actionListener
,它仍然工作正常。无论如何,您的解决方案解决了我的问题。谢谢。
public void delete() {  
    // ...
}