我有一个用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"在可更新部分!
我还想让你包括带有复选框