首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xpage、faces-config、托管bean和作用域变量

Xpage、faces-config、托管bean和作用域变量
EN

Stack Overflow用户
提问于 2015-09-30 20:07:07
回答 3查看 1.1K关注 0票数 2

我的数据库中有一些属性,这些属性很少会更改,但在整个过程中都会得到广泛的使用。看起来这可能是我可以用托管bean做的事情吗?

代码语言:javascript
复制
<managed-bean>
<managed-bean-name>bu</managed-bean-name>
<managed-bean-class>    </managed-bean-class>
<managed-bean-scope>application</managed-bean-scope> </managed-bean>

我想在applicationScope.bu中得到一个值列表。

我只是编写一个简单的java实现吗?有没有更简单或更好的方法?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-09-30 20:22:07

如果我正确理解了您的问题,我认为托管bean的属性不会是您想要存储应用程序属性的地方。

我只想把它们放在你申请的登陆页的应用范围内。

票数 2
EN

Stack Overflow用户

发布于 2015-09-30 20:31:57

为了正确地实现托管bean,faces-config应该包括一个像您已经放入的块,但是您忽略了这个值。这是将在内存中创建的类(在您的例子中是applicationScope)。如果您的bean类有返回您要查找的值的方法,那么您就可以了。我喜欢bean(托管或POJO),并在一些应用程序中使用这种方法。

正如Steve在他的回答中指出的那样,编辑您对配置的可访问性和数量的需求可能会驱动您如何存储这些值。您与它们的接口方式可能有所不同,我倾向于使用托管bean。

对于需要为给定应用程序存储的少量值,我喜欢在XSP中设置这些值,然后可以通过XSPContext.getProperty('xsp.property.name');引用这些值。

对于更复杂的事情,我倾向于创建一个配置文档,它类似于配置文件,然后我将它从/存储加载到值中。/Edit

如果您正在寻找一个从托管bean开始的好地方,或者快速引用来检查是否正常,我建议使用查看Henrik Lausten关于这一主题的博客文章

简短的版本是,要拥有托管bean,您必须拥有:

  1. Java类
    • 用私有财产(值)建造的
    • 由公共getter/setter方法公开的
    • 实现可序列化(java.io.Serializable)
    • 包含无参数的构造函数(必须在第一次构建时不使用任何参数;并不意味着它无法在其他地方找到值)

  1. faces-config中的一个条目(非常类似于您所勾画的)
  2. 通过结合
    • 使用#{beanName.propertyName} (EL使用带camel大小写的属性名称,进行转换,因此getPropertyName()的getter方法在EL中不存在,如第一次所示
    • 带有#{javascript:return beanName.getPropertyName()}的SSJS (完全方法调用)

然后,您可以在表达式语言或SSJS块中使用托管bean的名称(在您的示例中为"bu")。在EL绑定中,请注意属性使用要访问的camel大小写;因此myProperty的属性由getMyProperty公开,但看起来类似于#{bu.myProperty}。您还可以通过完整的方法名(如#{javascript:return bu.getMyProperty();} )在SSJS中使用它。

这里有一个例子,在我的演示程序中是用于数据对象的。它在viewScope中,因此它使用给定XPage的生命周期。

faces-config.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<faces-config>
  <managed-bean>
    <managed-bean-name>gotHouse</managed-bean-name>
    <managed-bean-scope>view</managed-bean-scope>
    <managed-bean-class>com.westeros.model.HouseModel</managed-bean-class>
  </managed-bean>
  <!--AUTOGEN-START-BUILDER: Automatically generated by IBM Domino Designer. Do not modify.-->
  <!--AUTOGEN-END-BUILDER: End of automatically generated section-->
</faces-config>

HouseModel.java *为了简洁起见,我在这里做了修改,作为一个例子。

代码语言:javascript
复制
package com.westeros.model;
//...
public class HouseModel implements Serializable {
    private static final long serialVersionUID = 1L;
    private String name;

    //...
    public HouseModel(){}

    public void load(String unid){
      // do some load things from the doc's UNID
    }


    public void setName(String name){
      this.name = name;
    }
    public String getName(){
      return this.name;
    }
    //...
}

house.xsp (House XPage) *为示例的简洁性摘录

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<xp:view
    xmlns:xp="http://www.ibm.com/xsp/core">
  <!-- truncating -->
  <div
    class="form-group">
  <xp:label
    for="name"
    value="Name" />
  <xp:inputText
    id="name"
    value="#{gotHouse.name}" />
  </div>
  <!-- truncating -->
</xp:view>
票数 4
EN

Stack Overflow用户

发布于 2015-10-01 07:07:37

可以使用托管bean的托管属性。比如这个小豆..。

代码语言:javascript
复制
package ch.hasselba.xpages;

import java.io.Serializable;

@SuppressWarnings("serial")
public class MyBean implements Serializable {

    private String dbName;

    public void setDbName(String dbName) {
        this.dbName = dbName;
    }

    public String getDbName() {
        return dbName;
    }

}

..。可以在faces-config.xml中初始化

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<faces-config>

    <managed-bean>
        <managed-bean-name>myBean</managed-bean-name>
        <managed-bean-class>ch.hasselba.xpages.MyBean</managed-bean-class>
        <managed-bean-scope>application</managed-bean-scope>

        <managed-property>
            <property-name>dbName</property-name>
            <value>MyName</value>
            <property-class>java.lang.String</property-class>
        </managed-property>
    </managed-bean>

</faces-config>

一旦您访问bean,值就会“存在”。F.e.你XPage上的标签..。

代码语言:javascript
复制
<xp:label
    value="#{myBean.dbName}"
    id="label1">
</xp:label>

..。然后显示MyName。

托管属性可以包含其他bean和访问运行时属性(f.e。请求参数),这使得它们非常强大。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32874699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档