从绑定到托管 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>
所以当加载并且值为否时,如果我将单选按钮设置为是它仍然是否。
我应该如何从单选按钮收集(更改的)值?
Ps 我尝试添加绑定 属性(例如 binding="#{myValue}"
),但通过此方法得到了相同的意外结果。
PPs 我还尝试在 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>
您不会追求 UI 组件。为了可见性,请使用您在 bean 上作为布尔方法提供的 EL 表达式 employeeBean.isStaffMember
。
只需确保您的部分刷新目标(一个面板?)包括您的单选按钮和额外字段
考虑以下几点:
<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>
和bean组成。我用了一张地图,因为我对你的 Employee
class 一无所知 :) :
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"));
}
}
一些建议:
- 尽量少用
javascript
语言。长期 运行 对您没有帮助。此外,source 看起来很痛苦。尽量用EL表达式,争取永远
- 不要将 Java 字符串与 == 进行比较,而应将其与
.equals
进行比较
- 确保您要刷新的块实际上可以刷新(看看为什么我让
xp:div id="example
始终可见,但随后添加了一个检查 staffMember
值的内部标记)。这并不意味着您必须这样做。这取决于您构建 XPage 的方式。
- 使用
execMode
缩小 POST 范围。力求表现
在我的 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>
所以当加载并且值为否时,如果我将单选按钮设置为是它仍然是否。
我应该如何从单选按钮收集(更改的)值?
Ps 我尝试添加绑定 属性(例如 binding="#{myValue}"
),但通过此方法得到了相同的意外结果。
PPs 我还尝试在 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>
您不会追求 UI 组件。为了可见性,请使用您在 bean 上作为布尔方法提供的 EL 表达式 employeeBean.isStaffMember
。
只需确保您的部分刷新目标(一个面板?)包括您的单选按钮和额外字段
考虑以下几点:
<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>
和bean组成。我用了一张地图,因为我对你的 Employee
class 一无所知 :) :
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"));
}
}
一些建议:
- 尽量少用
javascript
语言。长期 运行 对您没有帮助。此外,source 看起来很痛苦。尽量用EL表达式,争取永远 - 不要将 Java 字符串与 == 进行比较,而应将其与
.equals
进行比较
- 确保您要刷新的块实际上可以刷新(看看为什么我让
xp:div id="example
始终可见,但随后添加了一个检查staffMember
值的内部标记)。这并不意味着您必须这样做。这取决于您构建 XPage 的方式。 - 使用
execMode
缩小 POST 范围。力求表现