我最近試圖用AJAX編寫一些簡單的JSF頁面。它基本上只有兩個數字字段然後將其在另一多個組件如何針對相同的「f:ajax渲染」目標?
<head>
<style>
.standardText {
font-family: Arial, serif;
}
.result {
font-family: Arial, serif;
border-top: solid blue 5px;
text-align: right;
width: 30%;
}
.input-field {
font-family: Arial, serif;
font-weight: bold;
margin-left: 5px;
}
</style>
</head>
<h:body>
<h2 class="input-field">Type in your arguments and the glorious machine will tell you the <br/>
<span style="color: slateblue; text-overline: true;">TRUTH</span>!!</h2>
<h:form>
<p></p>
<h:outputLabel value="Your first argument" for="arg"/>
<h:inputText value="#{test.arg}" id="arg">
<f:ajax event="change" render="result"/>
</h:inputText>
<p></p>
<h:outputLabel value="Your second argument"
styleClass="standardText" for="arg2"/>
<h:inputText value="#{test.arg2}" id="arg2">
<f:ajax event="change" render="result"/>
</h:inputText>
<h:panelGroup layout="block">
<h:outputText value="Your result is: #{test.result}" id="result"/>
</h:panelGroup>
</h:form>
</h:body>
加在一起的bean是一樣的頁面一樣簡單:只需三個屬性arg
,arg2
和result
(結果是在吸氣計算)。
package com.jsf;
import javax.faces.view.ViewScoped;
import javax.inject.Named;
import java.io.Serializable;
@Named("test")
@ViewScoped
public class Test implements Serializable {
private static final long serialVersionUID = 1L;
private Integer arg;
private Integer arg2;
private int result;
public int getResult() {
result = arg + arg2;
return result;
}
public Integer getArg() {
return arg;
}
public void setArg(Integer arg) {
this.arg = arg;
}
public Integer getArg2() {
return arg2;
}
public void setArg2(Integer arg2) {
this.arg2 = arg2;
}
}
當運行的facelet和一個值填充,結果輸出不發生變化。
經過一段時間的調試,我猜測兩個組件不能有相同的render
目標?
我試圖將h:form
組合在一個f:ajax
標記下 - 沒有成功。
解決方案的想法?
是值進入您的支持bean?你可以把價值?兩個組件應該能夠具有相同的渲染項目 –
看着你的標題,答案是'他們可以'。所以也許更新標題和真正的問題。像@SamOrozco的狀態調試...是調用的setter,你看到在瀏覽器控制檯中觸發ajax事件。請調查方式更多你自己在一個開發人員的角色,而不是最終用戶 – Kukeltje
'渲染結果''是不是有效的XML。 – BalusC