How to update/refresh list items of list view in oracle maf?

334 Views Asked by At

I have list of tasks. When I delete my one of the task my list still shows that task in the list but on server side i have updated list I am not able to refresh my list. I am getting new task array from server but not able to show it. When I launched my app again then it is showing the updated list. How can I get updated list without killing the app? Both the times I have updated array but not able to show it on the view.

    public class ModelClass {
private String message;

private String statusCode;

private Response[] res = null;

protected transient PropertyChangeSupport _propertyChangeSupport = new PropertyChangeSupport(this);

public ModelClass() {
    super();

    clickEvent(new ActionEvent());

}

public static String taskId;

public void setTaskId(String taskId) {
    System.out.print(taskId);
    this.taskId = taskId;
}

public String getTaskId() {
    return taskId;
}


public PropertyChangeSupport getPropertyChangeSupport() {
    return _propertyChangeSupport;
}

public void setMessage(String message) {
    String oldMessage = this.message;
    this.message = message;
    _propertyChangeSupport.firePropertyChange("message", oldMessage, message);
}

public String getMessage() {
    return message;
}

public void setStatusCode(String statusCode) {
    String oldStatusCode = this.statusCode;
    this.statusCode = statusCode;
    _propertyChangeSupport.firePropertyChange("statusCode", oldStatusCode, statusCode);
}

public String getStatusCode() {
    return statusCode;
}


public void setRes(Response[] res) {
    Response[] oldRes = this.res;
    this.res = res;
    System.out.println(res);
    _propertyChangeSupport.firePropertyChange("res", oldRes, res);
    System.out.println("refreshing here ");

}

public Response[] getRes() {

    return res;
}


@Override
public String toString() {
    return "ClassPojo [response = " + res + ", message = " + message + ", statusCode = " + statusCode + "]";
}


public void addPropertyChangeListener(PropertyChangeListener l) {
    _propertyChangeSupport.addPropertyChangeListener(l);
}

public void removePropertyChangeListener(PropertyChangeListener l) {
    _propertyChangeSupport.removePropertyChangeListener(l);
}


public class Response {
    private String taskId;

    private String taskType;

    private Integer taskTime;

    private String taskName;

    private PropertyChangeSupport _propertyChangeSupport = new PropertyChangeSupport(this);

    Response(String taskId, String taskType, String taskName) {
        super();
        this.taskId = taskId;
        this.taskType = taskType;
        this.taskName = taskName;

    }

    public void setTaskId(String taskId) {
        String oldTaskId = this.taskId;
        this.taskId = taskId;
        _propertyChangeSupport.firePropertyChange("taskId", oldTaskId, taskId);
    }

    public String getTaskId() {
        return taskId;
    }

    public void setTaskType(String taskType) {
        String oldTaskType = this.taskType;
        this.taskType = taskType;
        _propertyChangeSupport.firePropertyChange("taskType", oldTaskType, taskType);
    }

    public String getTaskType() {
        return taskType;
    }

    public void setTaskTime(Integer taskTime) {
        Integer oldTaskTime = this.taskTime;
        this.taskTime = taskTime;
        _propertyChangeSupport.firePropertyChange("taskTime", oldTaskTime, taskTime);
    }

    public Integer getTaskTime() {
        return taskTime;
    }

    public void setTaskName(String taskName) {
        String oldTaskName = this.taskName;
        this.taskName = taskName;
        _propertyChangeSupport.firePropertyChange("taskName", oldTaskName, taskName);
    }

    public String getTaskName() {
        return taskName;
    }


    @Override
    public String toString() {
        return "ClassPojo [taskId = " + taskId + ", taskType = " + taskType + ", taskTime = " + taskTime +
               ", taskName = " + taskName + "]";
    }

    public void addPropertyChangeListener(PropertyChangeListener l) {
        _propertyChangeSupport.addPropertyChangeListener(l);
    }

    public void removePropertyChangeListener(PropertyChangeListener l) {
        _propertyChangeSupport.removePropertyChangeListener(l);
    }
}

protected transient ProviderChangeSupport providerChangeSupport = new ProviderChangeSupport(this);

public void addProviderChangeListener(ProviderChangeListener l) {

    providerChangeSupport.addProviderChangeListener(l);

}

public void removeProviderChangeListener(ProviderChangeListener l) {

    providerChangeSupport.removeProviderChangeListener(l);

}


public void clickEvent(ActionEvent actionEvent) {


    try {
        JSONObject paramsMap = new JSONObject();
        paramsMap.put("userId", "1");


        HttpURLConnection httpURLConnection = null;
        try {
            URL url = new URL("http://ec2-54-226-57-153.compute-1.amazonaws.com:8080/#########");
            httpURLConnection = (HttpURLConnection) url.openConnection();
            httpURLConnection.setReadTimeout(120000);
            httpURLConnection.setConnectTimeout(120000);
            httpURLConnection.setRequestMethod("POST");
            httpURLConnection.setRequestProperty("Content-Type", "application/json");
            httpURLConnection.setDoInput(true);
            httpURLConnection.setDoOutput(true);
            httpURLConnection.connect();
            OutputStream os = httpURLConnection.getOutputStream();
            BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));
            os.write(paramsMap.toString().getBytes());
            bufferedWriter.flush();
            bufferedWriter.close();
            os.close();

            if (httpURLConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {
                InputStream is = httpURLConnection.getInputStream();
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
                StringBuilder builder = new StringBuilder();
                String line = bufferedReader.readLine();
                while (line != null) {
                    builder.append(line + "\n");
                    line = bufferedReader.readLine();
                }
                is.close();
                if (httpURLConnection != null)
                    httpURLConnection.disconnect();
                System.out.println(builder.toString());
                JSONObject json = new JSONObject(builder.toString());
                String status = json.optString("statusCode");
                String message = json.optString("message");
                String response = json.optString("response");
                System.out.println(status);
                System.out.println(message);
                //                                       System.out.println(response);
                JSONArray objarr = json.optJSONArray("response");
                Response[] temp_res = new Response[objarr.length()];

                for (int i = 0; i < objarr.length(); i++) {

                    System.out.println(objarr.getJSONObject(i));
                    JSONObject obj = objarr.getJSONObject(i);
                    String task = obj.optString("taskName");
                    taskId = obj.optString("taskId");
                    String taskType = obj.optString("taskType");
                    System.out.println(task);
                    System.out.println(taskId);
                    System.out.println(taskType);
                    temp_res[i] = new Response(taskId, taskType, task);


                }
                setRes(temp_res);


            } else {
                if (httpURLConnection != null)
                    httpURLConnection.disconnect();
                System.out.println("Invalid response from the server");
            }
        } catch (Exception e) {
            e.printStackTrace();
            if (httpURLConnection != null)
                httpURLConnection.disconnect();
        } finally {
            if (httpURLConnection != null)
                httpURLConnection.disconnect();
        }


    } catch (Exception e) {
        e.printStackTrace();
    }





}
2

There are 2 best solutions below

1
Rashi Verma On

I think you need to add providerChangeSupport.fireProviderRefresh("res"); and you have to make public method for providerChangeSupport. Here is the link : https://community.oracle.com/message/13203364#13203364

6
Azazael On

Other than the fix suggested by Rashi Verma, there is one more change required.

The code snippet:

res = (Response[]) res_new.toArray(new Response[res_new.size()]); 
setRes(res);

needs to be changed to:

Response[] temp_res;
temp_res = (Response[]) res_new.toArray(new 
Response[res_new.size()]); 
setRes(temp_res);

Currently, because the value of res is changed before invoking setRes, the propertyChangeEvent is not fired inside setRes. Both this propertyChangeEvent and the providerRefresh are needed for the changes you are making to start reflecting on the UI.