当前位置: 首页 > 知识库问答 >
问题:

p: 和ajax更新后未调用commandButton操作

朱自明
2023-03-14

我有一个JSF页面,其中有一个具有ajax=true的p:命令按钮,并在单击时呈现一个包装在p: outputGroup中的p:面板。当单击此按钮时,action方法将在ManagedBean中将show CreateUser值设置为true,这用于呈现面板。这工作正常——单击按钮后面板会正确呈现。在p:面板内还有另一个p:命令按钮。这个命令按钮不起作用,因为当我单击它时什么都不会发生。永远不会调用action方法。当我调试时,我意识到即使ajax操作将show CreateUser设置为true,但当我单击第二个按钮时,show CreateUser值为false。因此,面板呈现=false,因此永远不会调用该操作。以下是xhtml和Management edbean类。我该如何解决这个问题?感谢您的帮助!

注册.xhtml

<h:form id="userForm" style="background-color:white;border:0px; width:90%;">
   <p:messages id="messagesForDebugging"
               showDetail="true"
               autoUpdate="true" />
   <ui:debug hotkey="x"/>
   <div style="margin-bottom: 10px;">
       <p:commandButton id="btnConfirmYes" value="Yes" ajax="true" update="userRegOutPanel" 
               action="#{regBean.confirmYes}" styleClass="button" style="height:35px;">
        <!-- <f:ajax render="userRegOutPanel" execute="userRegOutPanel"/> -->
       </p:commandButton>

       <p:commandButton id="btnConfirmNo" value="No" ajax="false"
             action="#{regBean.confirmNo}" styleClass="button" style="height:35px;"/>
   </div>

   <p:outputPanel id="userRegOutPanel">
        <p:panel id="userRegPanel" rendered="#{regBean.showCreateUser}">
            <p:panelGrid id="userRegPanelGrid">
                <p:row>
                   <p:column style="width:40%;background-color:#00a5b6;-moz-border-radius: 10px;-webkit-border-radius: 10px;-khtml-border-radius: 10px;border-radius: 10px;text-align:left;">

                      <h:inputHidden id="ssn" value="#{regBean.ssn}"/>

                      <p:panelGrid>
                          <p:row>
                              <p:column>
                                  <p:commandButton value="Submit" ajax="true" action="#{regBean.submitRegistration}"                                                 
                                           styleClass="button" style="width:140px;height:35px;" type="submit"/>
                              </p:column>
                          </p:row>
                      </p:panelGrid>
                   </p:column>
                </p:row>
            </p:panelGrid>
        </p:panel>
   </p:outputPanel>
</h:form>

管理豆

    @ManagedBean
        @ViewScoped
        public class RegBean implements Serializable{

    private static final long serialVersionUID = 1L;
    static Logger log = LoggerFactory.getLogger(RegBean.class);

    private String ssn;

    private boolean showCreateUser = false;

    public void confirmYes(){
        setShowCreateUser(true);
    }

    public String confirmNo(){
        log.info("In retrieveRegistration");
        FacesContext fc = FacesContext.getCurrentInstance();
        fc.addMessage("registrationError", new FacesMessage(
                FacesMessage.SEVERITY_ERROR,
                "Error. Contact customer service",
                "Error. Contact customer service"));
        return "/registration/registrationError";
    }

    public String submitRegistration() {  
        log.info("In submitRegistration");
        FacesContext fc = FacesContext.getCurrentInstance();

        return "/secured/home";
    }  

    public String getSsn() {
        return ssn;
    }
    public void setSsn(String ssn) {
        this.ssn = ssn;
    }

    public boolean isShowCreateUser() {
        return showCreateUser;
    }

    public void setShowCreateUser(boolean showCreateUser) {
        this.showCreateUser = showCreateUser;
    }
}

共有1个答案

呼延烈
2023-03-14
<p:commandButton id="btnConfirmNo" value="No" ajax="false"
action="#{regBean.ConfirmNo}"
styleClass="button" style="height:35px;"/>

在上面的代码中,您已将操作设置为“ConfirmNo”。我看不出有这样的方法

将上述代码更改为:

<p:commandButton id="btnConfirmNo" value="No" ajax="false"
action="#{regBean.agentConfirmNo}"
styleClass="button" style="height:35px;"/>

现在,它将从注册bean中调用方法agentConfirmNo。

我希望这能有所帮助。

 类似资料:
  • 我以https://stackoverflow.com/a/3180885/242042中的示例为例,只是根据我的需要对其进行了调整。 这是我的豆子: 和我的JSF文件 所以它是相当相似的,但我不明白的是为什么它不想在“编辑”上调用操作。(即我在SystemOut.log上看不到任何内容) 我正在查看答案https://stackoverflow.com/A/13327382/242042,看看是

  • 我使用的和。 我已经准备好了客户端母版,它使用向导添加客户端,同时反映在可数据化中。然后我更新了可更新的编辑实用程序。然后我添加了删除按钮,并尝试调用bean的删除方法。 但是当我点击删除按钮时,添加客户端的向导验证被执行。所以我创建了另一个文件并包含在中,但结果仍然相同。现在,我想添加删除实用程序中的日期。我尝试了很多技巧来做到这一点。 我只是想通过操作监听器传递客户端标识,删除并刷新可更新的命

  • 我有这段代码,我看不出问题的根源在哪里,我在chrome控制台我的控制器中没有发现任何错误: 和在div-loadedthings中正确加载; 控制台中的newMsgs按照它应该的方式进行解析; 我让它为其他页面工作,但似乎我错过了这一页上的一些东西。我有

  • 这是怎么造成的,我该怎么解决?

  • 问题内容: 我有这段代码,我看不出问题的根源在哪里,我在控制器的chrome控制台中没有收到任何错误: 并正确加载到div加载的东西中; 控制台中的newMsgs会按照应有的方式进行解析; 我有它适用于其他页面,但似乎我错过了这个页面上的东西。我有标签: 执行此命令时,我在控制台中得到“未定义”: 问题答案: 忽略我在评论中指出的其他体系结构问题,真正的问题是您使用的是而不是Angular的。当您

  • 问题内容: 我通过ajax将某些表单数据发送到同一页面中的php脚本。PHP必须处理数据并在同一页面上显示结果。 我正在为ajax使用以下语法: 我基本上是在尝试根据表格中输入的数据并由php脚本处理后的数据来更新图表中的某些值。执行此操作后,我会获得页面的整个来源,并且在执行此操作后会在控制台中更新值,但图表不会更新。当我查看源页面时,值保持不变。我该怎么办? 这是我的updatechart()