我有一个 primefaces 对话框,其中有一组单选按钮和两个文本字段。我想在change
单选按钮事件中启用/禁用这些文本字段。
这是我的对话框代码
<h:panelGrid style="float:left;">
<h:selectOneRadio id="timeLimit" layout="pageDirection" value="#{bean.selectedOption}" onchange="submit()"
valueChangeListener="#{bean.enableDisableDecision}">
<f:ajax event="change" execute="@this" render="from to"/>
<f:selectItem itemValue="1" itemLabel="Once Only"/>
<f:selectItem itemValue="2" itemLabel="From:"/>
<f:selectItem itemValue="3" itemLabel="Permanent"/>
<f:selectItem itemValue="4" itemLabel="Ignore"/>
</h:selectOneRadio>
</h:panelGrid>
<h:outputText id="c" value="#{renderBean.limitFields}"/>
<h:inputText id="from" disabled="#{renderBean.limitFields}"></h:inputText>
<h:outputText style="margin-left:-20px;float:left;margin-top: 20px;" value="To: "/>
<h:inputText id="to" style="float:left; margin-top: -20px;" disabled="#{renderBean.limitFields}"></h:inputText>
这是我的 RenderBean
@ManagedBean
@SessionScoped
public class RenderBean {
public boolean limitFields;
public RenderBean() {
limitFields = true;
}
public boolean isLimitFields() {
return limitFields;
}
public void setLimitFields(boolean limitFields) {
this.limitFields = limitFields;
}
public void enableLimitFields() {
limitFields = false;
}
public void disableLimitFields() {
limitFields = true;
}
}
这是我调用监听器的 Bean 类。
@ManagedBean
@SessionScope
class Bean{
public void durationSelected(ValueChangeEvent e){
RenderBean rb = null;
System.out.println("Value: "+e.getNewValue().toString());
if(e.getNewValue().toString().equals("2")){
rb = (RenderBean) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("renderBean");
rb.enableLimitFields();
}else{
rb = (RenderBean) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("renderBean");
rb.disableLimitFields();
}
}
}
现在我的代码运行完美,它可以毫无问题地调用方法,但是当我更改单选按钮的选择时,它不会启用/禁用文本字段。这意味着值正在更改,但 JSF 组件在 ajax 调用时不会读取它们.现在我被困在这里了。任何syggestions?