Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.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
Jsf 2 在JSF2.2中启用禁用按钮_Jsf 2 - Fatal编程技术网

Jsf 2 在JSF2.2中启用禁用按钮

Jsf 2 在JSF2.2中启用禁用按钮,jsf-2,Jsf 2,我正在尝试一个简单的例子来启用和禁用基于表单提交的按钮。如果有人还可以告诉我jsf:id的概念,因为我将普通的html5与jsf混合在一起 以下是相关代码: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:jsf="http://java.sun.com/jsf" xmlns:f="http://java.sun.com/jsf/core"> <head

我正在尝试一个简单的例子来启用和禁用基于表单提交的按钮。如果有人还可以告诉我jsf:id的概念,因为我将普通的html5与jsf混合在一起

以下是相关代码:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
     xmlns:jsf="http://java.sun.com/jsf" 
     xmlns:f="http://java.sun.com/jsf/core">
    <head jsf:id="head">
        <title>Putting it all together </title>
        <!-- script jsf:target="body" jsf:name="js.js"/>
        <link jsf:name="css.css" rel="stylesheet" type="text/css" /-->
    </head>
    <body jsf:id="body">
        <form jsf:id="form" jsf:prependId="false">
            <label jsf:for="name">Name </label>
            <input jsf:id="name" type="text" jsf:value="#{complex.name}">
                <f:ajax execute="@this" render="progress"/>
            </input>
            <label jsf:for="tel">Tel </label>
            <input jsf:id="tel" type="tel" jsf:value="#{complex.tel}">
                <f:ajax execute="@this" render="progress"/>
            </input>

            <label jsf:for="email">Email </label>
            <input jsf:id="email" type="email" jsf:value="#{complex.email}">
                <f:ajax execute="@this" render="progress"/>
            </input>

            <label for="progress">Progress </label>
            <progress jsf:id="progress" max="3">#{complex.progress} of 3 </progress>


            <input jsf:id="submit" type="submit" value="submit">
                <f:ajax execute="@this" render="login" event="click" listener="#{complex.process}" />
            </input>

            <!-- label jsf:id="status"></label-->
            <button jsf:id="login" disabled="#{complex.status}">Login</button>

        </form>
    </body>
</html>
以下是打印到网页的错误:

HTTP Status 500 - java.lang.Boolean cannot be cast to java.lang.String

type Exception report

message java.lang.Boolean cannot be cast to java.lang.String

description The server encountered an internal error that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: java.lang.Boolean cannot be cast to java.lang.String
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)

root cause

java.lang.ClassCastException: java.lang.Boolean cannot be cast to java.lang.String
    com.sun.faces.renderkit.html_basic.HtmlResponseWriter.getAttributeValue(HtmlResponseWriter.java:1210)
    com.sun.faces.renderkit.html_basic.HtmlResponseWriter.flushAttributes(HtmlResponseWriter.java:1170)
    com.sun.faces.renderkit.html_basic.HtmlResponseWriter.closeStartIfNecessary(HtmlResponseWriter.java:1112)
    com.sun.faces.renderkit.html_basic.HtmlResponseWriter.writeText(HtmlResponseWriter.java:935)
    com.sun.faces.facelets.compiler.LiteralTextInstruction.write(LiteralTextInstruction.java:76)
    com.sun.faces.facelets.compiler.UIInstructions.encodeBegin(UIInstructions.java:82)
    com.sun.faces.facelets.compiler.UILeaf.encodeAll(UILeaf.java:183)
    javax.faces.render.Renderer.encodeChildren(Renderer.java:176)
    javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:900)
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:1847)
    javax.faces.render.Renderer.encodeChildren(Renderer.java:176)
    javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:900)
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:1847)
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:1850)
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:1850)
    com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:443)
    com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
    com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120)
    com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:202)
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:646)

note The full stack trace of the root cause is available in the Apache Tomcat/7.0.35 logs.
Apache Tomcat/7.0.35

代码的关键部分是

<button jsf:id="login" disabled="#{complex.status}">Login</button>
现在它意味着对于
标记,
disabled
属性的值不是
布尔值,而是
字符串

,因此该属性的值是
disabled=“disabled”

请处理HTML5的
disabled
属性

您需要从托管bean中设置字符串值,并将
status
属性声明为
String
,而不是
boolean

代码的关键部分是

<button jsf:id="login" disabled="#{complex.status}">Login</button>
现在它意味着对于
标记,
disabled
属性的值不是
布尔值,而是
字符串

,因此该属性的值是
disabled=“disabled”

请处理HTML5的
disabled
属性

您需要从托管bean中设置字符串值,并将
status
属性声明为
String
,而不是
boolean

我无法确定它,因为我不使用JSF,但它必须与
Login
相关。关于
复杂。状态
是一个布尔值,这是一个错误。也许你应该使用视图Scoped@Jaider响应具有有效的属性值,但仍然没有反映在UI上。我想使用命令按钮更有可能解决这个问题。我无法确定它,因为我不使用JSF,但它必须与
登录
有关。关于
复杂。状态
是一个布尔值,这是一个错误。也许你应该使用视图Scoped@Jaider响应具有有效的属性值,但仍然没有反映在UI上。我想使用命令按钮更可能解决它。我改为字符串状态属性,现在错误消失了,但如何启用按钮。基本上在提交时,我尝试处理切换行为,以了解如何控制它。如果我返回空字符串,登录按钮仍然处于禁用状态。-Miten.为此,您需要发布一个新线程。如果这个答案对您有帮助,请接受它,并为您的下一个问题启动一个新线程。顺便说一句,当您返回空字符串时,它不应继续其禁用行为。请记住,要启用,不要返回空字符串,而是通过空字符串返回初始化字符串。与此类似,status的值应该是
status=“”
公共无效进程(AjaxBehaviorEvent事件){System.out.println(“调用的侦听器进程”);status=(status=“disabled”?:“disabled”);},所以我确实返回status=“”;正如您所提到的,但按钮仍处于禁用状态。是否确实正在调用名为
process
的Ajax方法?信息:无法识别值${webapp.ProjectStage}的ProjectStage。开始阶段还原\视图1结束阶段还原\视图1开始阶段渲染\响应6结束阶段渲染\响应6开始阶段还原\视图1结束阶段还原\视图1开始阶段应用\请求\值2结束阶段应用\请求\值2开始阶段流程\验证3结束阶段流程\验证3开始阶段更新\模型\值4结束阶段更新\u模型\u值4开始阶段调用\u应用程序5
调用的侦听器进程
结束阶段调用\u应用程序5开始阶段渲染\u响应6结束阶段渲染\u响应6I更改为字符串状态属性,现在错误消失,但如何启用按钮。基本上在提交时,我尝试处理切换行为,以了解如何控制它。如果我返回空字符串,登录按钮仍然处于禁用状态。-Miten.为此,您需要发布一个新线程。如果这个答案对您有帮助,请接受它,并为您的下一个问题启动一个新线程。顺便说一句,当您返回空字符串时,它不应继续其禁用行为。请记住,要启用,不要返回空字符串,而是通过空字符串返回初始化字符串。与此类似,status的值应该是
status=“”
公共无效进程(AjaxBehaviorEvent事件){System.out.println(“调用的侦听器进程”);status=(status=“disabled”?:“disabled”);},所以我确实返回status=“”;正如您所提到的,但按钮仍处于禁用状态。是否确实正在调用名为
process
的Ajax方法?信息:无法识别值${webapp.ProjectStage}的ProjectStage。开始阶段还原\视图1结束阶段还原\视图1开始阶段渲染\响应6结束阶段渲染\响应6开始阶段还原\视图1结束阶段还原\视图1开始阶段应用\请求\值2结束阶段应用\请求\值2开始阶段流程\验证3结束阶段流程\验证3开始阶段更新\模型\值4结束阶段更新\u模型\u值4开始阶段调用\u应用程序5
调用的侦听器进程
结束阶段调用\u应用程序5开始阶段渲染\u响应6结束阶段渲染\u响应6
java.lang.ClassCastException: java.lang.Boolean cannot be cast to java.lang.String