如何在使用selectOneChoice时避免页面刷新

时间:2014-07-10 09:39:02

标签: oracle-adf jdeveloper

我正在开发JDeveloper 11g第2版。我的表单中包含af:input text个元素和af:selectonechoice个元素。问题出在af:selectonechoice元素上。从此选项列表中选择一个值后,它会刷新其他元素的值。我的意思是af:inputtext的值丢失或字段变空。

af:selectonechoice的代码如下:

    <af:selectOneChoice label="User Permission" id="soc" 
      value="#{row.bindings.UserPermission.inputValue}" 
      autoSubmit="true" valueChangeListener="#{SomeBean.setSomeValue}">
        <af:selectItem label="Administrator" value="ADMIN" id="si1"/>
        <af:selectItem label="Manager" value="MANAGER" id="si2"/>
        <af:selectItem label="Employee" value="EMPLOYEE" id="si3"/>
    </af:selectOneChoice>

以下是输入文字的代码:

    <af:inputText value="XXX" label="XXX" id="id3" readOnly="true" partialTriggers="soc" >
    </af:inputText> 

只有上面的inputText有部分触发器。这很好用。另外我确信其他输入元素没有任何部分触发器。为什么其他输入元素也在更新。关于这个的任何想法。

修改

    <af:column sortProperty="#{bindings.TasksView1.hints.TaskNo.name}" 
      sortable="true" headerText="Task No" id="c2">
        <af:inputText value="#{row.bindings.TaskNo.inputValue}"
        label="#{bindings.TasksView1.hints.TaskNo.label}" id="id3"
        partialTriggers="soc">
    </af:inputText>
   </af:column>

ValueChangeLister的代码是:

    public void generateTaskNo(ValueChangeEvent valueChangeEvent){   
    DCBindingContainer dcBindings = (DCBindingContainer)BindingContext.getCurrent().getCurrentBindingsEntry();
    DCIteratorBinding iterBind = (DCIteratorBinding)dcBindings.get("TasksView1Iterator");            
    valueChangeEvent.getComponent().processUpdates(FacesContext.getCurrentInstance());
    String task_code = (String)iterBind.getCurrentRow().getAttribute("USERPERMISSION");
    task_code = task_code +'-';
    String task_no = (String)iterBind.getCurrentRow().getAttribute("TaskNo");
    task_code = task_code + task_no;         
    iterBind.getCurrentRow().setAttribute("TaskNo", task_code );     

}

这里我得到SelectOneChoice值和输入文本值[id为'id3']。根据所选选项的值[管理员,经理,员工],我将在该输入文本中设置值[TaskNo]。这不应该影响表单中的其他输入字段。但问题是所有其他输入字段也在更新并丢失其先前的值。我确信那些输入字段没有任何部分触发器。

2 个答案:

答案 0 :(得分:0)

您选择的一个选项(SOC)设置为auto submit = true。然后任何元素都有SOC的部分触发器,然后刷新元素。元素SOC将其值提交给服务器,其他元素监听该值。听力元素需要刷新以更新他的SOC值

答案 1 :(得分:0)

对此的解决方案是,如果您使用选择一个选项组件,并将值列表存储在数据库中。假设您的存储“ID”数据类型包含整数,但在数据库存储列数据类型中包含Varchar,则单击save时会自动刷新soc组件。因此,您可以检查db列和值列表(lov)存储值。