簡體   English   中英

從綁定到托管bean的單選按鈕組獲取價值

[英]getting value from radiobutton group that is binded to a managed bean

在我的XPage上,我有一個單選按鈕組控件,該控件綁定到托管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>

因此,當加載並且值是No時,如果我將單選按鈕設置為Yes,它將保持為No。

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

binding="#{myValue}" :我嘗試添加綁定屬性(例如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>

考慮以下:

<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范圍。 力求表現

您無需追求UI組件。 為了提高可見性,請使用您在bean上作為布爾方法提供的EL表達式employeeBean.isStaffMember 只要確保您的部分刷新目標(面板?)既包含單選按鈕又包含額外的字段

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM