Вот как я генерирую уникальный id:
public static String getDeviceId(Context ctx)
{
TelephonyManager tm = (TelephonyManager) ctx.getSystemService(Context.TELEPHONY_SERVICE);
String tmDevice = tm.getDeviceId();
String androidId = Secure.getString(ctx.getContentResolver(), Secure.ANDROID_ID);
String serial = null;
if(Build.VERSION.SDK_INT > Build.VERSION_CODES.FROYO) serial = Build.SERIAL;
if(tmDevice != null) return "01" + tmDevice;
if(androidId != null) return "02" + androidId;
if(serial != null) return "03" + serial;
// other alternatives (i.e. Wi-Fi MAC, Bluetooth MAC, etc.)
return null;
}
Да, они не совпадают, в скриптлете, в котором используется неявный объект сеанса http, в атрибуте тега struts вы ссылаетесь на объект карты сеансов struts, полученный через OGNL. У тебя ничего нет, потому что они разные. Чтобы использовать карту сеансов struts, вы должны реализовать SessionAware
в действии. Таким образом, перехватчик конфигурации сервлетов будет вводить в него сеанс, тогда вы можете использовать карту сеанса, чтобы поместить туда значения, которые будут доступны через OGNL.
Пример реализации SessionAware
:
private Map<String, Object> session;
@Override
public void setSession(Map<String, Object> session) {
this.session = session;
}
lazy исключение инициализации происходит, потому что вы не реализовали toString
в объектах модели.