5

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

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

如果不是,那么在 Java 中获得不会重复的唯一编号的最佳方法是什么?

谢谢

4

5 回答 5

9

这是我在需要唯一编号时使用的:

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

于 2013-04-01T03:25:28.200 回答
5

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

String ID = (String)session.evaluate("@Unique").elementAt(0);
于 2013-09-04T19:24:28.327 回答
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 左右开始获取时间来缩短此时间。

于 2013-04-01T13:17:28.310 回答
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");
}

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

于 2013-04-01T13:56:48.593 回答
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
于 2013-04-02T13:25:28.463 回答