ELを使用してボタンを有効/無効にすることは可能ですか? 送信ボタンを使用して、ログイン ボタンをトグル (有効/無効) したい。complex.process メソッドが呼び出されています。
また、名前、電話、電子メールを入力するとサーバーに投稿されることがわかりますが、進行状況バーには意味のある表示が実際には表示されません。
win 7でfirefox 19、jsf 2.2m09、tomcat 7.0.35を使用しています。
スニペット:
<form>
...
<input jsf:id="submit" type="submit" value="submit">
<f:ajax execute="@this" render="status" event="click" listener="#{complex.process}" />
</input>
<label jsf:id="status">#{complex.status}</label>
<button jsf:id="login" disabled="#{complex.status}">Login</button>
</form>
完全なコードは次のとおりで、正しいデータがレンダリングされていることを示していますが、ボタンは無効のままです。
フェイスレット:
<!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="status" event="click" listener="#{complex.process}" />
</input>
<label jsf:id="status">#{complex.status}</label>
<button jsf:id="login" disabled="#{complex.status}">Login</button>
</form>
</body>
</html>
マネージドBean:
package com.myco.bean;
import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
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 String status = "disabled";
public void process(AjaxBehaviorEvent event) {
System.out.println("listener process called");
boolean s = false;
status = (status == "disabled" ? "" : "disabled");
if(status == "") s = false; else s = true;
//FacesContext.getCurrentInstance().getViewRoot().findComponent("form").findComponent("login").getAttributes().put("disabled", s);
}
public String isStatus() {
return status;
}
public String getStatus() {
System.out.println("getStatus:" + status);
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getProgress() {
int progress = 0;
if(name != null) {
progress++;
}
if(tel != null) {
progress++;
}
if(email != null) {
progress++;
}
return progress + "";
}
}
一部の tomcat ログ出力:
START PHASE RESTORE_VIEW 1
END PHASE RESTORE_VIEW 1
START PHASE APPLY_REQUEST_VALUES 2
END PHASE APPLY_REQUEST_VALUES 2
START PHASE PROCESS_VALIDATIONS 3
END PHASE PROCESS_VALIDATIONS 3
START PHASE UPDATE_MODEL_VALUES 4
END PHASE UPDATE_MODEL_VALUES 4
START PHASE INVOKE_APPLICATION 5
listener process called
END PHASE INVOKE_APPLICATION 5
START PHASE RENDER_RESPONSE 6
getStatus:disabled
END PHASE RENDER_RESPONSE 6