当我想要文档的唯一键时,我偏爱使用@Unique()。我喜欢它基于用户名和时间。
有没有办法从 Java bean 中获取它?
如果不是,那么在 Java 中获得不会重复的唯一编号的最佳方法是什么?
谢谢
当我想要文档的唯一键时,我偏爱使用@Unique()。我喜欢它基于用户名和时间。
有没有办法从 Java bean 中获取它?
如果不是,那么在 Java 中获得不会重复的唯一编号的最佳方法是什么?
谢谢
这是我在需要唯一编号时使用的:
String controlNumber = UUID.randomUUID().toString();
是的你可以。当您获得会话调用的句柄时,请评估。您可以使用此方法评估任何公式表达式。
String ID = (String)session.evaluate("@Unique").elementAt(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 左右开始获取时间来缩短此时间。
那这个呢:
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 字符串。不幸的是,您的服务器签名,而不是在浏览器中运行时的当前用户名。我是客户,它将按预期工作。
以下是我很久以前开发的 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