无法解析表达式[#{privilegeManagedBean.deleteAction(p)}]

时间:2014-08-22 07:36:30

标签: jsf primefaces el

我想在CommandLink下单击GraphicImage时从数据表中删除选定的行。     但它不适合我。

它给出错误: -

  

/privilegepage.xhtml @ 66,21 action ="#{privilegeManagedBean.deleteAction(p)}"无法解析表达式[#{privilegeManagedBean.deleteAction(p)}]

豆:-Privilege

    public class Privilege {

    private int id;
    private String privilege;

    public Privilege() {
    }

    public Privilege(int id, String privilege) {
        this.id = id;
        this.privilege = privilege;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getPrivilege() {
        return privilege;
    }

    public void setPrivilege(String privilege) {
        this.privilege = privilege;
    }

}

bean: - PrivilegeDao.java

    public int deletePrivilege(int id) {
        PreparedStatement preparedStatement = null;
        String sqlprivilege;
        Connection dbConnection = null;
        int pinsert = 0;
        try {
            sqlprivilege = "delete privilege from privilege where id=?";
            dbConnection = ConnectionDao.getDBConnection();
            preparedStatement = dbConnection.prepareStatement(sqlprivilege);
            preparedStatement.setInt(2, id);
            if(preparedStatement.executeUpdate()==1)
                pinsert=1;
            else
                pinsert=0;
            System.out.println("privilege is delete :- ");
        } catch (SQLException e) {

            System.out.println(e.getMessage());

        } finally {

            if (preparedStatement != null) {
                try {
                    preparedStatement.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

            if (dbConnection != null) {
                try {
                    dbConnection.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

        }
        return pinsert;
    }

bean:-PrivilegeManagedBean

    @ManagedBean(name = "privilegeManagedBean", eager = true)
    @SessionScoped
    /* @ManagedProperty(value="#param.id") */
    public class PrivilegeManagedBean {
    private int id;
    private String privilege;
    private PrivilegeDao pdao;
    @SuppressWarnings("unused")
    private List<Privilege> privilegeData;
    private static int srno;
    private int selectedRowIndex = -1;

    public PrivilegeManagedBean() {
        privilegeData = new ArrayList<Privilege>();
        pdao = new PrivilegeDao();
        srno = 0;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getPrivilege() {
        return privilege;
    }

    public void setPrivilege(String privilege) {
        this.privilege = privilege;
    }

    public void setPrivilegeData(List<Privilege> privilegeData) {
        this.privilegeData = privilegeData;
    }

    public List<Privilege> getPrivilegeData() {
        return this.privilegeData = pdao.getUserList();
    }

    public int getSelectedRowIndex() {
        return selectedRowIndex;
    }

    public void setSelectedRowIndex(int selectedRowIndex) {
        this.selectedRowIndex = selectedRowIndex;
    }
    public void addDataTableRow() {
        pdao.addRow(this.id, this.privilege);

    }

    private static ArrayList<Privilege> privilegeList = new ArrayList<Privilege>();

    public ArrayList<Privilege> getPrivilegeList() {
        return privilegeList;
    }

    public void setPrivilegeList(ArrayList<Privilege> privilege) {
        privilegeList = (ArrayList<Privilege>) pdao.getUserList();
    }

    public int addAction() {
        Privilege privilegeitem = new Privilege(this.id, this.privilege);
        privilegeList.add(privilegeitem);
        return pdao.addPrivilege(this.privilege);
    }

    public int deleteAction() {
        Privilege privilegeitem = new Privilege(this.id, this.privilege);
        privilegeList.remove(privilegeitem);
        System.out.println("delete Action...");
        return pdao.deletePrivilege(this.id);

    }

    public int onEdit(RowEditEvent event) {
        FacesMessage msg = new FacesMessage("Privilege Edited",
                ((Privilege) event.getObject()).getPrivilege());
        FacesContext.getCurrentInstance().addMessage(null, msg);
        int pid = pdao.getPrivilegeId(this.privilege);
        System.out.println("Privilege Name For Id :- " + this.privilege);
        System.out.println("Privilege Id :- " + pid);
        return pdao.updatePrivilege(pid, this.privilege);
    }

    public void onCancel(RowEditEvent event) {
        FacesMessage msg = new FacesMessage("Privilege Cancelled");
        FacesContext.getCurrentInstance().addMessage(null, msg);
        privilegeList.remove((Privilege) event.getObject());
    }

    public String deletePrivilege(Privilege privilege) {
        privilegeList.remove(privilege);
        return null;
    }

    public int getSrno() {
        return ++srno;
    }
    }

Privilege.xhtml

<p:growl id="messages" showDetail="true" />
        <p:dataTable value="#{privilegeDao.userList}" var="p"
            id="datatbldispprivilege" style="width:500px" editable="true" lazy="true">
            <f:facet name="header">  
                        Privilege List  
                    </f:facet>
            <p:ajax event="rowEdit" listener="#{privilegeManagedBean.onEdit}"
                update=":form1:messages" />
            <p:ajax event="rowEditCancel"
                listener="#{privilegeManagedBean.onCancel}" update=":form1:messages" />
            <p:column headerText="Privileges Name">
                <p:cellEditor>
                    <f:facet name="output">
                        <p:outputLabel value="#{p.privilege}" name="privilegeoutputname" />
                    </f:facet>
                    <f:facet name="input">
                        <p:inputText value="#{privilegeManagedBean.privilege}"
                            name="privilegeinputname" />
                    </f:facet>
                </p:cellEditor>
            </p:column>
            <p:column headerText="Options" style="width:100px">
                <p:rowEditor>

                </p:rowEditor>
            </p:column>

            <p:column headerText="Delete" style="width:100px">
                <p:commandLink action="#{privilegeManagedBean.deleteAction(p)}"
                    update="@form">
                    <p:graphicImage value="/images/deleteicon.png" library="images"
                        onclick="if (!confirm('Are you sure you want to delete the current record?')) return false"
                        width="20px" height="20px" />
                    <f:param name="pname" value="#{p.name}" />

                </p:commandLink>

            </p:column>
        </p:dataTable>

2 个答案:

答案 0 :(得分:0)

您的PrivilegeManagedBean#deleteAction不接受任何参数,但您的JSF代码会将数据表value的当前迭代传递给该方法。所以要么不传递任何东西到方法:

<p:commandLink action="#{privilegeManagedBean.deleteAction()}" update="@form">

或更改PrivilegeManagedBean#deleteAction的方法签名。

答案 1 :(得分:0)

你试图调用错误的方法。行动应该是这样的:

<p:commandLink action="#{privilegeManagedBean.deletePrivilege(p)}" update="@form">