2017-04-19 56 views
0

在我的XPage我有被綁定到託管bean單選按鈕組控制:獲得價值被綁定到託管bean

<xp:radioGroup value="#{employeeBean.employee.staffMember}" id="radioStaff"> 
    <xp:selectItem itemLabel="Yes" /> 
    <xp:selectItem itemLabel="No" /> 
    <xp:eventHandler event="onchange" submit="true" refreshMode="partial" refreshId="radioStaffDept"></xp:eventHandler> 
</xp:radioGroup> 

當設置爲是的,我想顯示另一個輸入字段進入部門。

我試圖設置通過局部刷新選項的可見性,但我總是得到它返回的值是如何通過我的bean設置的。

我測試,以收集它通過值:加載時,值是不,如果我設定的單選按鈕來

<xp:text escape="true" id="computedField1"> 
    <xp:this.value><![CDATA[#{javascript: 
var radio1:com.ibm.xsp.component.xp.XspInputRadio = getComponent("radioStaff"); 
return radio1.getValue()}]]></xp:this.value> 
</xp:text> 

所以,是的,它仍然號

我應該如何收集(改變)單選按鈕的值?

Ps我嘗試添加綁定屬性(例如binding="#{myValue}"),但通過此方法獲得了相同的不期望結果。

的PP我也試着設置onChange事件的staffMember場但這並沒有工作,要麼(employeeBean.employee.setStaffMember("Yes");

===

我不知道如果我用下面的正確理解是它代碼我可以檢查一個人是否是職員,但是當我更改單選按鈕中的選項時,如何將值(暫時)寫回我的bean中的提議對象?

private Employee employee; 

    public Boolean isStaffMember(){ 
     if (employee.getStaffMember()=="Yes"){ 
      return false; 
     } 
     else{ 
      return true; 
     } 
    } 

    public void setStaffMember(String value){ 
     employee.setStaffMember(value); 
    } 


    <xp:radioGroup 
          value="#{employeeBean.employee.staffMember}" 
          binding="#{staffMember}" id="radioStaffMember"> 
          <xp:selectItem itemLabel="Yes" /> 
          <xp:selectItem itemLabel="No" /> 
          <xp:eventHandler event="onchange" 
           submit="true" refreshMode="partial" 
           refreshId="pnlStaffMemberDept" > 
           <xp:this.action><![CDATA[#{javascript:var thisVal = getComponent("radioStaffMember").getValue(); 
employeeBean.setStaffMember(thisVal);}]]></xp:this.action> 
          </xp:eventHandler> 
         </xp:radioGroup> 
+0

我注意到在我的窗體上出現了多個複選框組控件導致問題。當我刪除它們時,SSJS按預期工作。這是一個已知的錯誤? – Malin

回答

2

考慮以下幾點:

<p>Staff member?</p> 

<xp:radioGroup value="#{employeeBean.employee.staffMember}" 
    id="radioStaff"> 
    <xp:selectItem itemLabel="Yes" /> 
    <xp:selectItem itemLabel="No" /> 
    <xp:eventHandler event="onchange" submit="true" 
     execMode="partial" refreshMode="partial" refreshId="examples" /> 
</xp:radioGroup> 

<xp:div id="examples"> 
    <xp:text disableOutputTag="true" 
     rendered="#{not empty employeeBean.employee.staffMember}"> 
     <p> 
      <xp:text value="The value is: #{employeeBean.employee.staffMember}" /> 
     </p> 

     <p> 
      <xp:text value="A staff member (checkbox string value evaluation)" 
       rendered="#{employeeBean.employee.staffMember eq 'Yes'}" /> 
     </p> 

     <p> 
      <xp:text value="A staff member (boolean value evaluation)" 
       rendered="#{employeeBean.staffMember}" style="color: green" /> 
     </p> 

     <p> 
      <xp:text value="Not a staff member (boolean value evaluation)" 
       rendered="#{not employeeBean.staffMember}" style="color: red" /> 
     </p> 
    </xp:text> 
</xp:div> 

而且豆組合物。我用了一個地圖,因爲我不知道你Employee類東西:):

public class EmployeeBean implements Serializable { 

    private static final long serialVersionUID = 1L; 

    private Map<String, Object> employee; 

    public Map<String, Object> getEmployee() { 
    if (employee == null) { 
     employee = new HashMap<String, Object>(); 
    } 

    return employee; 
    } 

    public boolean isStaffMember() { 
     return "Yes".equals(getEmployee().get("staffMember")); 
    } 

} 

一些建議件:你可以

  1. 嘗試一樣都不能少javascript語言使用。從長遠來看,它無法幫助你。此外,來源是很痛苦的觀看。使用EL表達式儘可能多的,你可以,爭取始終
  2. 不要拿java字符串處理的==而是與.equals
  3. 確保您要刷新的塊實際上可以被刷新(爲什麼我離開xp:div id="example始終可見,但隨後添加了一個內部標記,用於檢查值staffMember值)。這並不意味着你一定要這樣做。這取決於你如何構建你的XPage。
  4. 使用execMode縮小POST範圍。努力提高性能
+0

我不知道我在做什麼錯,但是在我的員工類中的setter中public void setStaffMember(String staffMember){ \t \t System.out.println(「setStaffMember:」+ staffMember); \t \t this.staffMember = staffMember; \t}當我更改單選按鈕中的值時,它會持續向控制檯輸出「否」。 – Malin

+0

是否可以通過部分刷新重新加載employeeBean? – Malin

+0

'employeeBean'的範圍是什麼?它如何在'faces-config.xml'中設置? 「Employee」類還有其他什麼嗎?你能發佈它的源代碼嗎? – shillem

0

您不需要使用UI組件。對於可見性,使用您在bean上作爲布爾方法提供的EL表達式employeeBean.isStaffMember。 只要確保你的局部刷新目標(面板?)包括你的單選按鈕和額外的領域

+0

你能幫助我嗎?我不確定我是否正確解讀你。我用你的建議更新了我的問題。 – Malin

+0

如果我在每次刷新部門字段時重新啓動bean時加載原始值(來自Notes文檔)時執行局部刷新: - ? – Malin

+0

你在豆裏面做什麼取決於你。我將該bean配置爲viewScope作用域,並在其上使用專用的加載(單用)和save()方法 – stwissel