0

我有一个 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?

4

1 回答 1

1

只需onchange="submit()"从您的单选按钮中删除。我不是 JSF 专家,但我想当您发送 ajax 请求时,只需执行您的数据<f:ajax ..,然后无需提交它。所以当我复制粘贴您的示例时,它不起作用并且然后我通过删除尝试它onchange="submit",它工作正常:)

于 2013-04-02T04:37:16.183 回答