当我想要一个文件的唯一键时,我偏爱使用@Unique()。我喜欢它基于用户名和时间。
有没有办法从Java bean中获取它?
如果没有,那么在Java中获得一个不会重复的唯一数字的最佳方法是什么?
由于
答案 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