Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xpages ObjectData自定义控件:将合成数据与文本混合_Xpages - Fatal编程技术网

Xpages ObjectData自定义控件:将合成数据与文本混合

Xpages ObjectData自定义控件:将合成数据与文本混合,xpages,Xpages,我想为我的DataObjects创建一个自定义控件,它有两个属性,javaClass和javaModel 因此,如果我有一个java类名acme.com.model.Person,那么javaClass属性将是acme.com.model.Person,javaModel属性将是Person 我开始构建我的自定义控件,但在遇到语法问题之前,只添加了一些东西 真正的问题是createObject。我不明白如何用我的compositeData值替换createObject中当前硬编码的“Person

我想为我的DataObjects创建一个自定义控件,它有两个属性,javaClass和javaModel

因此,如果我有一个java类名acme.com.model.Person,那么javaClass属性将是acme.com.model.Person,javaModel属性将是Person

我开始构建我的自定义控件,但在遇到语法问题之前,只添加了一些东西

真正的问题是createObject。我不明白如何用我的compositeData值替换createObject中当前硬编码的“Person”。这可能吗

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core"
    xmlns:xe="http://www.ibm.com/xsp/coreex">
        <xp:this.data>
        <xe:objectData
            saveObject="#{javascript:compositeData.javaModel + 'save()'}"
            var="${javascript:compositeData.javaModel}">
            <xe:this.createObject><![CDATA[#{javascript:var Person = new com.scoular.model.Person();
var unid = context.getUrlParameter("key")
if (unid != "") {
    Person.loadByUnid(unid);
    viewScope.put("readOnly","Yes");
} else {
    Person.create();
    viewScope.put("readOnly","No");
}
return Person;}]]></xe:this.createObject>
        </xe:objectData>
        </xp:this.data>
</xp:view>

正如您可能尝试将业务逻辑与“UI”(XPages标记)分离一样,您可以将“创建”代码移动到构造函数方法中的
Person
类,该类:

  • 调用以检查“key”的URL参数
  • 设置属性的键(使其更像bean,可选,但可能是个好主意)
  • 调用
    loadByUnid(String)
    方法
  • 并将相应的
    readOnly
    值放入
    viewScope
public类Person实现可序列化{
私有静态最终长serialVersionUID=1L;
//构造函数方法
公众人士(){
Map reqParm=FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
字符串unid=(字符串)reqParm.get(“键”);
Map vwScope=ExtLibUtil.getViewScope();
如果(unid!=“”){
这是loadByUnid(unid);
vwScope.put(“只读”、“是”);
}否则{
这个。create();
viewScope.put(“只读”、“否”);
}
}
//...
}
然后,您的
createObject
块看起来更像:


这应该将足够多的细节转移到标记层之外,以便在特定类之间更易于重用,前提是每个自构造都是这样


对于将
compositeData
与文本混合的一般方法,您应该传递一个对象引用,因此对于上面的save方法示例,我认为您应该能够通过
compositeData.javaModel.save()更多地访问它
,前提是
save
方法存在于
compositeData.javaModel
引用的对象中。我不认为附加方法的字符串会起作用,但我不能说我已经尝试过这种方法。

My荣幸@BryanSchmiedeler。