在h:commandbutton中使用onclick with action

时间:2014-12-14 18:14:40

标签: javascript jsf jsf-2 commandbutton

我想选择一个用户并在弹出页面中进行编辑。

   <h:form>
        <h:selectOneMenu id="friendselected" value="#{userBean.selecteduser}">
            <f:selectItems value="#{userBean.users}" />
        </h:selectOneMenu>
        <h:commandButton value="Edit User" action="#{userBean.edituser()}" onclick="#{userBean.JSPopup()}" />
    </h:form>

弹出代码

public String JSPopup() {
    return "javascript:void window.open(' UserEdit.xhtml ',' name ','width=700,height=500,toolbar=0,menubar=0,location=0,status=0,scrollbars=0,resizable=1,left=0,top=0');return false;";
}

首先,我将选择用户并将其ID设置为selecteduser。在弹出页面中,我看到它的信息和编辑。

public void edituser()
{
    initializeJdbc();

    String aSQL="select * from users where UserID="+selecteduser;
    Statement st = null;
    ResultSet rs = null;

    try {
        st = (Statement) connect.createStatement();
        rs = st.executeQuery(aSQL);

        if(rs.next()) {
            fullname=rs.getString("FullName");
            username=rs.getString("UserName");
            password=rs.getString("Password");
            gender=rs.getString("Gender").charAt(0);
            BirthDate=rs.getString("BirthDate");
            Tel=rs.getString("Tel");
            Email=rs.getString("Email");
            Address=rs.getString("Address");
        }

    } catch (Exception ex) {

    }
}

1 个答案:

答案 0 :(得分:0)

return false;中的userBean.JSPopup()表示您不应启动默认事件,因此您的操作永远不会被调用。删除它,它应该没问题。

另一个暗示,此刻并没有给你造成任何问题,但值得注意。 onclick 是一个值属性,因此当你在其中放置方法表达式时,它不会调用方法bean onclick,而是在呈现页面时立即调用它(只需在JSPopup中设置调试)方法,看到这个)。如果我是你,我会用js代码替换方法表达式,例如。

onclick="javascript:void window.open(' UserEdit.xhtml ',' name ','width=700,height=500,toolbar=0,menubar=0,location=0,status=0,scrollbars=0,resizable=1,left=0,top=0');"

或创建一个函数并从onclick中调用它。目前您没有遇到任何问题,因为该方法仅返回js代码,但将来,如果您向该方法添加其他逻辑,则可能会得到意外结果。