App feuert diese Ausnahme, weil seine nicht sieht weist darauf hin, dass du es zurückgeben willst. Die Methode getField() gibt nicht-private Attribute zurück. Wenn Ihre Attribute privat sind, werden sie von der Methode nicht angezeigt. Sie können überprüfen http://docs.oracle.com/javase/tutorial/reflect/member/fieldTrouble.html
So können Sie tun, dass Ihre Attribute auf geschützten oder öffentlichen ändern und dann sollte es richtig funktionieren. Aber auf diese Art und Weise (das gleiche Beispiel wie auf Hauptgesichtern) wird eine echte Datenbank simuliert.
public List<Car> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String,String> filters) {
List<Car> data = new ArrayList<Car>();
//filter
for(Car car : datasource) {
boolean match = true;
for(Iterator<String> it = filters.keySet().iterator(); it.hasNext();) {
try {
String filterProperty = it.next();
String filterValue = filters.get(filterProperty);
String fieldValue = String.valueOf(car.getClass().getField(filterProperty).get(car));
...
Also diese Liste simuliert zum Beispiel echte Datenbank nur. Wenn du es benutzen willst. Sie sollten es also tun, wenn Sie die Bean-Klasse unterstützen. Sie öffnen die Verbindung bereits mit einem Filter oder nicht und geben dann Daten aus der Datenbank zurück.
// EDIT: Man schrieb, dass Sie getDeclaredField() verwenden sollte, aber ich tat dies versuchen und es nicht gut funktionieren, und IlegalAccessException wirft. Wenn ein Vortyp geschützt ist, funktioniert es gut. Ich weiß nicht warum.
Hallo Aber ich habe die Ausnahme auch beim Versuch geschützt.Die Ausnahme aufgetreten atjava.lang.IllegalAccessException: Klasse com.buddhiedge.server.model.StudyplanLazyDataModel kann nicht auf ein Mitglied der Klasse com.buddhiedge.server.entity.StudyplanCategory mit Modifikatoren zugreifen " protected " – user1281029
Hi Sein funktionierender öffentlicher Zugriffsspezifizierer, obwohl es gegen die Prinzipien ist, dass wir Mitgliedsfelder von DATABASE TABLE (in diesem Fall) als privat behalten sollten. – user1281029
Man hatte ich das gleiche Problem, aber wenn eine geänderte Attribute zu schützen, so IllegalAccessEception Nachricht wurde nicht mehr angezeigt. Also versuche es in die Öffentlichkeit zu ändern. es sollte funktionieren. Die Wahrnehmung hat bereits eine Lösung wie field.setAccessible (true) geschrieben; Aber später, versuchen Sie es in Ihrer Backing-Bean-Klasse zu tun, in @PostConstruct erstellen Sie neue LazyDataModel-Klasse und dort erstellen Sie Anweisung für Ihre Datenbank bereits mit Filter und Anweisung wird zu Ihnen gefilterten Daten zurück, es ist "Lazy Loading". – Sajmon