复选框在Oracle ADF表:不获取或设置数据



我有一个用Oracle ADF编写的应用程序。

在其中,我有一个表,我需要通过它添加一个映射回VARCHAR列的复选框列。

我在我的视图对象中创建了一个瞬态布尔属性,它正确地设置了真实属性。这个设置在我的业务组件测试器/浏览器中工作得很好。但是,在我的JSPX中,根据transient属性获取复选框的表列没有获取或设置数据。

这个设置是完全按照这个博客中所示完成的:在Oracle ADF的表组件中添加布尔复选框。例如,我的真实属性(它是varchar/string),称为isCurrent。我创建了名为isCurrentBoolean(布尔数据类型)的暂态列,它分别设置了复选框属性。我使用Row Implementation类来正确设置这两个属性——这在ADF Business Component Tester/Browser中工作得很好。

但是,在JSPX页面上的表中,启用了复选框的记录不显示为已选中。当我尝试设置数据时,我的提交过程不会运行(没有错误,它实际上不会运行)。

任何想法?

谢谢!

更新01:

我有我的瞬态布尔属性正确获取基于字符串/varchar属性的数据,现在它只是设置数据部分不工作。

在行实现类中,我添加了一条消息,在每次为IsCurrentBoolean运行setter时触发。当复选框被选中时,它不会触发。我把autosubmit设为true。我将看看是否还有其他我可以做的事情,但我可能只是在我的应用程序模块中添加一个方法,并在复选框的值更改侦听器中触发它-作为一种解决方案。

JSPX代码:

<af:column sortProperty="IsCurrentBoolean" sortable="false" 
    headerText="Current?" id="c2" width="50">
<af:selectBooleanCheckbox value="#{row.IsCurrentBoolean}" id="sbc1" 
    autoSubmit="true" />

行Impl代码:这是我的设置瞬态属性(设置真正的属性):

    if (value) {
        this.setProvPracIsCurrent("Y");
        setAttributeInternal(ISCURRENTBOOLEAN, value);
    } else {
        this.setProvPracIsCurrent("N");
        setAttributeInternal(ISCURRENTBOOLEAN, value);
    }

这家伙是救世主:http://adfreusablecode.blogspot.com/2012/09/afselectbooleancheckbox-with-y-n-values.html

基本上,我使用瞬态属性消除了瞬态属性和ADF表列。

相反,我使用映射回数据库的属性(String/VarChar)。

添加属性到我的表,这创建了一个输入文本框。将输入文本转换为复选框。删除了嵌套在转换复选框中的验证器标签。

创建了一个转换的转换器,用于在布尔值和字符串之间进行转换。用以下代码创建一个类:

  import java.util.Collection;
import java.util.Collections;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import org.apache.myfaces.trinidad.convert.ClientConverter;

public class YNConverter implements Converter, ClientConverter {
    public YNConverter() {
        super();
    }
  public Object getAsObject(FacesContext facesContext, UIComponent uiComponent, String value)
   {
     return "true".equals(value) ? "Y" : "N";
   }
   public String getAsString(FacesContext facesContext, UIComponent uiComponent, Object value)
   {
     return "Y".equals(value) ? "true" : "false";
   }
   public String getClientLibrarySource(FacesContext facesContext)
   {
     return null;
   }
   public Collection<String> getClientImportNames()
   {
     return Collections.emptySet();
   }
   public String getClientScript(FacesContext facesContext, UIComponent uiComponent)
   {
     return null;
   }
   public String getClientConversion(FacesContext facesContext, UIComponent uiComponent)
   {
     return null;
   }
}
在faces-config.xml中,添加类并将其定义为Converter。命名为YNConverter 在JSP页面中,我的复选框如下所示:
   <af:selectBooleanCheckbox value="#{row.bindings.ProvPracIsCurrent.inputValue}"
                                                      label="#{bindings.Ppsqnd4UppUpViewView.hints.ProvPracIsCurrent.label}"
                                                      required="#{bindings.Ppsqnd4UppUpViewView.hints.ProvPracIsCurrent.mandatory}"
                                                      shortDesc="#{bindings.Ppsqnd4UppUpViewView.hints.ProvPracIsCurrent.tooltip}"
                                                      id="it12"
                                                      converter="YNConverter"/>

繁荣。完成了。

当你说你使它完全像文章,你也使属性为"ALWAYS"在可更新部分!

我还想让你包括带有复选框

的页面片段

最新更新