Java 在jsf中单击第一个按钮后的第二个、第三个h:commandbutton上未调用操作方法

Java 在jsf中单击第一个按钮后的第二个、第三个h:commandbutton上未调用操作方法,java,jsf,Java,Jsf,我有一个JSF页面,我打算用它来编辑用户的信息。编辑用户所需的所有组件都包含在同一页中,我使用“渲染”属性来确定应该渲染哪些组件。将呈现第一个面板组,当您输入用户登录名并单击按钮时,一切正常,并显示第二个面板组,您可以在文本字段中更改用户信息。问题出现在单击手风琴面板第一个选项卡中的按钮时,它不起作用。我尝试了请求范围和视图范围,但在使用其中任何一个时都有相同的问题 <f:view contentType="text/html"> <h:head>

我有一个JSF页面,我打算用它来编辑用户的信息。编辑用户所需的所有组件都包含在同一页中,我使用“渲染”属性来确定应该渲染哪些组件。将呈现第一个面板组,当您输入用户登录名并单击按钮时,一切正常,并显示第二个面板组,您可以在文本字段中更改用户信息。问题出现在单击手风琴面板第一个选项卡中的按钮时,它不起作用。我尝试了请求范围和视图范围,但在使用其中任何一个时都有相同的问题

    <f:view contentType="text/html">
    <h:head>
        <f:facet name="first">
            <meta http-equiv="X-UA-Compatible" content="EmulateIE8" />
            <meta content='text/html; charset=UTF-8' http-equiv="Content-Type"/>
            <title></title>
        </f:facet> 
    </h:head>
    <h:body styleClass="pageDefaultBGC">
            <p:layout fullPage="true">
                <f:facet name="last">
                    <h:outputStylesheet library="css" name="discovery.css"></h:outputStylesheet>
                </f:facet>
                <p:layoutUnit styleClass="headerDiv" position="north" size="100">
                    <h:graphicImage library="images" name="header.jpg"></h:graphicImage>
                </p:layoutUnit>
                <p:layoutUnit styleClass="navDiv" position="west" size="200">
                    <h:outputText value="Navigation Menu"></h:outputText>
                    <br/>
                    <hr/>
                    <h:outputLink styleClass="navLink" value="index.xhtml">Admin Home</h:outputLink>
                    <br/>
                    <h:outputLink styleClass="navLink" value="addNewUser.xhtml">Add New User</h:outputLink>
                    <br/>
                    <h:outputLink styleClass="navLink" value="edituser.xhtml">Edit User</h:outputLink>
                    <br/>                    
                </p:layoutUnit>
                <p:layoutUnit position="center" id="main">
                    <h:form id="editForm">
                        <h:panelGroup rendered="#{!adminManagedBean.editingUser}">
                            <h2>Edit User Account</h2>
                            <h:outputLabel for="useredit" value="Enter User's Name:"></h:outputLabel>
                            <h:inputText id="useredit" value="#{adminManagedBean.editUserLogin}" required="true"></h:inputText>
                            <br/><br/>                  
      THIS BUTTON WORKS!---><h:commandButton value="Submit" action="#{adminManagedBean.startUserEdit()}"></h:commandButton>
                        </h:panelGroup>
                        <h:panelGroup rendered="#{adminManagedBean.editingUser}">
                            <h:outputText value="Editing User:"></h:outputText>
                            <p:dataTable value="#{adminManagedBean.editUser}" var="u">
                                <p:column styleClass="dataTableHeader" headerText="Full Name">#{u.firstName}&nbsp;#{u.lastName}</p:column>
                                <p:column styleClass="dataTableHeader" headerText="Username">#{u.login}</p:column>
                                <p:column styleClass="dataTableHeader" headerText="Phone">#{u.phone}</p:column>
                                <p:column styleClass="dataTableHeader" headerText="Email">#{u.email}</p:column>
                                <p:column styleClass="dataTableHeader" headerText="Agency ID">#{u.agencyId}</p:column>
                            </p:dataTable>
                            <br/>
                            <h:outputText value="User's Current Roles"></h:outputText>
                            <ul>
                                <ui:repeat value="#{adminManagedBean.editUsersRoles}" var="cr">
                                    <li><h:outputText value="#{cr}"></h:outputText></li>
                                </ui:repeat>
                            </ul>
                            <br/>
                            <h:outputText value="Select an item to edit using the menu below"></h:outputText>
                            <br/>
                            <p:accordionPanel>
                                    <p:tab title="Edit User's Name" titleStyleClass="accordianTitleStyle">
                                            <h:panelGrid styleClass="panelGridStyle1" columns="2" cellpadding="10">
                                                <h:outputText value="First Name:"></h:outputText>
                                                <h:inputText value="#{adminManagedBean.editUser.firstName}"></h:inputText>
                                                <h:outputText value="Last Name:"></h:outputText>
                                                <h:inputText value="#{adminManagedBean.editUser.lastName}"></h:inputText>
                  THIS BUTTON DOESN'T WORK----><h:commandButton value="Save Changes" action="#{adminManagedBean.saveNameChange()}"></h:commandButton>
                                                <h:commandButton value="Cancel Changes"></h:commandButton>    
                                            </h:panelGrid>
                                    </p:tab>

单击按钮时未调用“saveNameChange”方法。任何帮助都将不胜感激。

在编辑页面和bean以在S.O上发布的过程中。问题被发现,与JSF组件无关。问题有两个方面

1) 开发人员更改了数据库中表中字段的大小,但没有更改与该表关联的实体类中字段的大小,这导致验证抛出错误消息。 2) 正在使用的样式设置阻止显示来自验证的错误消息


解决方案:我更新了实体类,更正了样式,按钮现在工作正常。

所有这些代码都是复制bug所必需的吗?不,它不够完整,无法运行和复制。为了实现这一点,您需要能够为底层数据库创建一个持久化单元。我将代码放在xhtml页面中,直到应该被调用的方法没有被调用,而bean中的特定方法没有被调用为止。至少在JSF代码中添加一条注释,显示不起作用的按钮。在起作用的按钮中添加“THIS button WORKS-->”,在不起作用的按钮中添加“THIS button Not WORKS-->”。请学习如何隔离问题并创建解决方案。例如,代码中的

是否绝对必要,以便我们通过将代码复制粘贴到空白环境中来重现您的问题?如果不是,那就是纯粹的噪音。而你似乎拥有很多,导致我们不能立即看到森林中的树,因此不愿意花费精力去寻找它。这同样适用于一些JSF标记,例如
,等等。
@ManagedBean
@ViewScoped
public class AdminManagedBean implements Serializable {
public String saveNameChange(){
    log.info("save Name called");
    this.editUser = ssb.updateUser(editUser);
    return "edituser";
}