在 H:命令按钮中使用带有操作的 OnClick

use onclick with action in h:commandbutton

本文关键字:操作 OnClick 命令 按钮      更新时间:2023-09-26

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

   <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) {
    }
}

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

另一个提示,目前不会给您带来问题,但值得注意。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 代码,但将来,如果您向该方法添加其他逻辑,您可能会得到意外结果。