Java 动态按钮操作在jsf中不起作用

Java 动态按钮操作在jsf中不起作用,java,jsf,web,Java,Jsf,Web,在JSF中。 我使用的是选择标签。启动时==true将显示panelGrid。否则将显示开始命令按钮。 因此,当我点击Start CommandButton时,我设置started=true;并更新表格 <h:form id="frmBig"> <c:choose> <c:when test="#{realExam.started}">

在JSF中。 我使用的是选择标签。启动时==true将显示panelGrid。否则将显示开始命令按钮。 因此,当我点击Start CommandButton时,我设置started=true;并更新表格

<h:form id="frmBig">
                        <c:choose>
                            <c:when test="#{realExam.started}">
                                <p:panelGrid id="pnlExam" binding="#{realExam.grid}"/>
                            </c:when>
                            <c:otherwise>
                                <p:commandButton value="Start" binding="#{realExam.cmdBtn}"/>
                            </c:otherwise>
                        </c:choose>
                    </h:form>
当我单击FinishCommandButton时,不调用ShowResult方法。 为什么不打电话?我不知道

我也试着不使用choose标签。它工作得很好

public void showResult() {

    System.out.println("fin clicked");

        }

一般来说,不要混合使用jsfh:and f:tags和jstlc:tags。这可能会产生意想不到的结果,因为在JSF生命周期的不同点对它们进行评估

解决这个问题的方法是使用渲染属性。它也更整洁:

<h:form id="frmBig">
    <p:panelGrid id="pnlExam" binding="#{realExam.grid}" rendered="#{realExam.started}"/>
    <p:commandButton value="Start" binding="#{realExam.cmdBtn}" rendered="#{not realExam.started}"/>
</h:form>

问题解决了。我添加了@SessionScoped RealExam managedBean的负责人。谢谢你的所有建议

你能用showResult签名更新问题吗?你省略了一堆代码和上下文。对不起,我是JSF新手。我不理解渲染属性。
<h:form id="frmBig">
    <p:panelGrid id="pnlExam" binding="#{realExam.grid}" rendered="#{realExam.started}"/>
    <p:commandButton value="Start" binding="#{realExam.cmdBtn}" rendered="#{not realExam.started}"/>
</h:form>