gpt4 book ai didi

java - 从绑定(bind)到托管 bean 的单选按钮组获取值

转载 作者:行者123 更新时间:2023-12-02 02:53:14 24 4
gpt4 key购买 nike

在我的 XPage 上,我有一个绑定(bind)到托管 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>

当设置为"is"时,我想显示另一个输入字段来输入部门。

我尝试通过部分刷新选项设置可见性,但我总是得到返回的值,它是如何通过我的 bean 设置的。

我测试通过以下方式收集它的值(value):

<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>

因此,当加载且值为“否”时,如果我将单选按钮设置为"is",它仍然是“否”。

我应该如何从单选按钮收集(更改的)值?

Ps 我尝试添加绑定(bind)属性(例如 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>

最佳答案

考虑以下因素:

<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 的成分。我使用了 map ,因为我对您的 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. 确保您想要刷新的 block 实际上可以刷新(看看为什么我让 xp:div id="example 始终可见,但随后添加了一个内部标记来检查 >staffMember 值)。这并不意味着您必须这样做。这取决于您构建 XPage 的方式。
  4. 使用 execMode 缩小 POST 范围。力求绩效

关于java - 从绑定(bind)到托管 bean 的单选按钮组获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43489275/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com