Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java h:commandButton从第二次单击开始工作_Java_Forms_Jsf_Jsf 2 - Fatal编程技术网

Java h:commandButton从第二次单击开始工作

Java h:commandButton从第二次单击开始工作,java,forms,jsf,jsf-2,Java,Forms,Jsf,Jsf 2,这是我的密码: <h:form> <h:messages errorClass="errorMessage" infoClass="infoMessage" warnClass="warnMessage"></h:messages> <h:panelGroup id="login" layout="block" rendered="#{!securityBean.authorized}">

这是我的密码:

<h:form>
    <h:messages errorClass="errorMessage" infoClass="infoMessage"
                warnClass="warnMessage"></h:messages>
    <h:panelGroup id="login" layout="block" rendered="#{!securityBean.authorized}">
        <h:outputText value="login:"/>
        <h:inputText id="username" value="#{securityBean.username}"/>
        <h:outputText value="password:"/>
        <h:inputSecret id="password" value="#{securityBean.password}"/>
        <h:commandButton value="login" action="#{securityBean.login}"/>
    </h:panelGroup>

    <h:panelGroup id="logout" layout="block" rendered="#{securityBean.authorized}">
        <h:graphicImage id="img" library="img" name="login_success.jpg"/>
        <h:commandButton value="logout" action="#{securityBean.logout}"/>
    </h:panelGroup>
</h:form>
登录后,将显示“注销”按钮,但它仅在第二次单击时起作用。正如您所看到的,这里没有使用ajax,因此这对我没有帮助。。
我怎样才能使它正常工作?提前感谢。

我认为您有这个问题,因为您需要在注销后重定向(使用结果,而不是null)到主页或其他内容。我遇到了这个问题,我这样解决了:

public String logout(){
    HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
    if(session != null){
        session.invalidate();
    }
    return "redirectToHomePageAfterLogout";
}

希望这有帮助!:)

我认为您有这个问题,因为您需要在注销后重定向(使用结果,而不是null)到主页或其他内容。我遇到了这个问题,我这样解决了:

public String logout(){
    HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
    if(session != null){
        session.invalidate();
    }
    return "redirectToHomePageAfterLogout";
}

希望这有帮助!:)

这是因为表单提交的响应URL与生成表单提交的请求相同。它的效果是,URL总是在您实际所在位置的后面

您可以在URL后面加上?faces redirect=true,以强制JSF重定向您而不是转发您

给出了更好的概述


注销操作应返回一个字符串(),该字符串给出注销函数完成后要移动到的页面名称。

这是因为表单提交的响应URL与生成表单提交的请求相同。它的效果是,URL总是在您实际所在位置的后面

您可以在URL后面加上?faces redirect=true,以强制JSF重定向您而不是转发您

给出了更好的概述


注销操作应返回一个字符串(),该字符串给出注销函数完成后要移动到的页面的名称,但是。

我使用jsf 2。我发现一些主题,人们说这个问题在jsf 2中得到了解决。但是它不起作用。我们可以从调用这个表单的地方看到代码吗?您的SecurityBean是否在请求范围内?您是指这两个commandButtons中的java操作方法代码吗?或者别的什么?eljunior,是的,它是请求范围的..这是一个问题吗?我使用jsf 2..我发现一些主题,人们说这个问题在jsf 2中得到了解决..但它不起作用..我们可以从调用这个表单的地方看到代码吗?您的SecurityBean是请求范围的吗?您是指这两个commandButtons中的java操作方法代码吗?或者别的什么?eljunior,是的,它是请求范围的..有问题吗?今天晚些时候我也会试试。谢谢不客气!您也可以将此标记为问题的答案,以帮助其他人(如果他们有相同的问题!)今天晚些时候我也要试试。谢谢不客气!您也可以将此标记为问题的答案,以帮助其他人(如果他们有相同的问题!)