我想嘗試一個簡單的例子來啓用和禁用基於表單提交的按鈕。如果有人還可以將jsf:id的概念指向我,因爲我將純html5與jsf混合在一起。啓用禁用按鈕在jsf 2.2
下面是相關代碼:
<!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>
管理bean是:
package mypackage.bean;
import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.event.AjaxBehaviorEvent;
@ManagedBean
@SessionScoped
public class Complex implements Serializable {
public Complex() {}
private String name;
private String tel;
private String email;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
private boolean status;
public void process(AjaxBehaviorEvent event) {
status = !status;
}
public boolean isStatus() {
return status;
}
public boolean getStatus() {
return status;
}
public void setStatus(boolean status) {
this.status = status;
}
public String getProgress() {
int progress = 0;
if(name != null) {
progress++;
}
if(tel != null) {
progress++;
}
if(email != null) {
progress++;
}
return progress + "";
}
}
下面是錯誤打印到網頁:
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
因爲我不使用JSF,所以我不能把它固定下來,但它必須使用''。關於'complex.status'是一個布爾值的東西正在拋棄它。 – Makoto 2013-03-04 05:57:55
您可以使用查看範圍 – Jaider 2013-03-23 04:38:24
@Jaider該響應具有有效的屬性值,但仍不反映在UI上。我想用命令按鈕更有可能解決它。 – Miten 2013-03-24 13:59:31