2016-09-07 60 views
-1

我最近試圖用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是一樣的頁面一樣簡單:只需三個屬性argarg2result(結果是在吸氣計算)。

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標記下 - 沒有成功。

解決方案的想法?

+0

是值進入您的支持bean?你可以把價值?兩個組件應該能夠具有相同的渲染項目 –

+0

看着你的標題,答案是'他們可以'。所以也許更新標題和真正的問題。像@SamOrozco的狀態調試...是調用的setter,你看到在瀏覽器控制檯中觸發ajax事件。請調查方式更多你自己在一個開發人員的角色,而不是最終用戶 – Kukeltje

+0

'渲染結果''是不是有效的XML。 – BalusC

回答

-2

結果可能已更新,但未提交輸入值。

嘗試TA添加execute="@form"屬性您F:AJAX標籤

+1

這打破了Ajax的部分優勢,即減少服務器上的流量,處理等。默認值是「@ this」,它發送特定組件的值,如果事件發生,則該值將嵌套ajax標籤。 – Kukeltje

+0

execute =「@ form」在這種情況下將僅發送2個輸入。我不認爲它會顯着增加流量,處理等 – kalym4ik

+1

我知道,但它仍然不是解決方案。默認值應該工作。 – Kukeltje