可以在XPages中的Java内部执行@Unique()吗?

时间:2013-04-01 01:49:34

标签: xpages

当我想要一个文件的唯一键时,我偏爱使用@Unique()。我喜欢它基于用户名和时间。

有没有办法从Java bean中获取它?

如果没有,那么在Java中获得一个不会重复的唯一数字的最佳方法是什么?

由于

5 个答案:

答案 0 :(得分:9)

这是我在需要唯一号码时使用的内容:

String controlNumber = UUID.randomUUID()。toString();

答案 1 :(得分:4)

是的,你可以。当你获得Session调用的句柄时。您可以使用此方法评估任何公式表达式。

String ID = (String)session.evaluate("@Unique").elementAt(0);

答案 2 :(得分:0)

拉塞尔的回答是正确的。但是如果你需要一个更短的唯一键,你也可以尝试这个替代方案:

public static String getUnique() {
    String CHARLIST = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";

    long number=System.currentTimeMillis();
    int base=CHARLIST.length();

    String result="";
     while (number > 0){
      result = CHARLIST.charAt((int)(number%base))+result;
      number = number/base;
     }
     return result;
}

这基本上将从1970年的毫秒数转换为62个基数。您甚至可以通过从2012/12/31左右获得时间来缩短这一点。

答案 3 :(得分:0)

这个怎么样:

public String getUnique() {
    try {
        return (String) getCurrentSession().evaluate("@Unique").elementAt(0);
    } catch (NotesException e) {
        return "";
    }
}

// retrieve handle to a Notes-Domino object in the bean class
public static Session getCurrentSession() {
    FacesContext context = FacesContext.getCurrentInstance();
    return (Session) context.getApplication().getVariableResolver()
            .resolveVariable(context, "session");
}

它将返回一个熟悉的唯一字符串。不幸的是,您的服务器签名,而不是当它在浏览器中运行时的用户名。我是客户,它将按预期工作。

答案 4 :(得分:0)

以下是我很久以前开发的LotusScript代码,作为我的.DominoFramework的一部分,用于重现@Unique()的行为。您应该能够将其转换为Java以获得一组类似于您习惯的值。

Function unique() As String
  Dim   Index       As Integer
  Try:  
    On Error GoTo Catch
    Randomize
    Unique = ""
    For Index% = 1 To 4
      Unique$ = Unique$ + Chr$(CInt(Rnd(Index%)*26)+65)
    Next Index%
    Unique$ = Unique$ + "-"
    For Index% = 6 To 11
      Unique$ = Unique$ + Chr$(CInt(Rnd(Index%)*26)+65)
    Next Index%
    Exit Function
Catch:
  Stop
  DominoException.throw Me,  Nothing
  Exit Function
End Function