Action trong wak là gì ?

  • Action là các hàm được sinh ra bằng ActionFilter tạo ra những Object với scope tương tự như HttpRequest, HttpResponse… Ví dụ action.getParameters().get(“ADMIN”) tương tự với request.getParameter(“ADMIN”).

Dùng các Action như thế nào ?

  • Action bao gồm những hàm sau:
  • void backupLastUrl(): Hàm trả về url trước đó
    public void backupLastUrl() {
        Action.backupLastUrl(this.request);
    }
  • void closeConnection(): Hàm thực hiện đóng connection.
    public void closeConnection() throws Exception {
        if (this.connection == null) {
            return;
        }
        this.connection.close();
        this.connection = null;
    }
   vd:  action.getConnection().closeConnection();
  • void commit(): Hàm thực hiện xác nhận thực hiện lệnh.
    public void commit() throws Exception {
        if (this.connection == null) {
            return;
        }
        this.connection.commit();
        this.connection.setAutoCommit(false);
    }
    vd:  action.getConnection().commit();
  • String correctDataFilteredTableName(String tableName, String columnName, String dataType, String rightCode): Kiểm tra quyền dữ liệu.
    • tableName: Tên bảng dữ liệu
    • columeName: Tên cột dữ liệu
    • dataType: Kiểu dữ liệu
    • rightCode:
    public String correctDataFilteredTableName(String tableName, String columnName, String dataType, String rightCode) throws Exception {
        String condition = this.getDataPermissionSql(dataType, rightCode);
        condition = StringUtil.replaceAll((String) condition, (String) "$ColumnName$", (String) columnName);
        String alias = tableName;
        int index = tableName.indexOf(64);
        if (index >= 0) {
            alias = alias.substring(0, index);
        }
        if ((index = tableName.lastIndexOf(46)) >= 0 && index < alias.length() - 1) {
            alias = alias.substring(index + 1);
        }
        return "(SELECT * FROM " + tableName + " WHERE " + condition + ") " + alias;
    }
  • ScriptEngine createInterpreter()
    public ScriptEngine createInterpreter() throws Exception {
        if (this.interpreter == null) {
            ScriptEngineManager manager = new ScriptEngineManager();
            this.interpreter = manager.getEngineByExtension("js");
            this.interpreter.put("action", this);
            this.interpreter.put("config", (Object) this.getConfig());
            this.interpreter.put("dictionary", (Object) this.getDictionary());
        }
        return this.interpreter;
    }
  • void destroy(): Hàm ngắt kết nối tới database
    public void destroy() {
        Database.closeObject((Connection)this.connection);
        this.connection = null;
    }
  • String getActionPath():
    public String getActionPath() {
        String actionPath = this.getKey();
        if (actionPath.endsWith("/")) {
            actionPath = actionPath.substring(0, actionPath.length() - 1);
        }
        if (actionPath != null && !actionPath.isEmpty() && !actionPath.startsWith("/")) {
            actionPath = "/" + actionPath;
        }
        return actionPath;
    }
  • void getApplicationId(): Là giá trị tự sinh ra khi cài đặt ứng dụng wak. Khi gọi tới hàm sẽ trả về mã duy nhất là ứng dụng wak.
    public String getApplicationId() throws Exception {
        return AdmHelper.getInstance().getApplicationId();
    }
vd:     Combo==DATA_TYPE_ID
        Extra==!"onchange=\\"fs_refresh(" + action.getId() + ");\\""
        Item==SQL
            Value==!"SELECT DATA_TYPE_ID,NAME FROM ADM_DATA_TYPE WHERE APP_ID=" + action.getApplicationId() + " ORDER BY NAME";
            AddNullValue
        LiveValidation
            Presence
  • List<String> getChildValueList(DictionaryNode nd)
    public List<String> getChildValueList(DictionaryNode nd) throws Exception {
        List values = nd.getChildValueList();
        if (values == null || values.isEmpty()) {
            return values;
        }
        LinkedList<String> result = new LinkedList<String>();
        for (String value : values) {
            result.add(value.startsWith("!") ? String.valueOf(this.interpret(value.substring(1))) : value);
        }
        return result;
    }
  • Connection getConnection(): Hàm trả về một kết nối.
    public Connection getConnection() throws Exception {
        if (this.connection == null) {
            String dataSourceName = this.getConfig().getString("DataSource");
            DataSourceManager dsm = DataSourceManager.getInstance();
            DataSource ds = dataSourceName == null || dataSourceName.isEmpty() ? dsm.getDataSource() : dsm.getDataSource(dataSourceName);
            this.connection = ds.getConnection();
            this.connection.setAutoCommit(false);
        }
        return this.connection;
    }
  • String getContextPath(): Hàm trả về phần gốc của url
    public String getContextPath() {
        String contextPath = this.request.getContextPath();
        if (contextPath.endsWith("/")) {
            contextPath = contextPath.substring(0, contextPath.length() - 1);
        }
        return contextPath;
    }
    vd:  http://.../com/ftl/ttksnn/industry_information/list.jsp 
    String path= action.getContextPath() >> "/com/ftl/ttksnn/industry_information"
  • String getDataPermissionSql(String dataType, String rightCode) : Kiểm tra quyền dữ liệu
    public String getDataPermissionSql(String dataType, String rightCode) throws Exception {
        HttpSession session = this.request.getSession();
        String userId = (String) session.getAttribute("userId");
        int userIdValue = -1;
        if (userId != null && !userId.isEmpty()) {
            userIdValue = Integer.valueOf(userId);
        }
        List associatedGroups = (List) session.getAttribute("associatedGroups");
        return AdmHelper.getInstance().getDataPermissionSql(userIdValue, associatedGroups, dataType, rightCode);
    }
  • Dictionary getDictionary(): Hàm xử lý trả về giá trị trong file cấu hình Dictionary.
    public static Dictionary getDictionary(String key) {
        Dictionary dic = dictionaryMap.get(key);
        if (dic == null) {
            dic = new Dictionary();
        }
        return dic;
    }
    vd: action.getDictionary().get("EXCEL_FORMAT") , 'EXCEL_FORMAT' là trường được thiết lp để gi mt câu thông báo bên file Dictionary.
  • Dictionary getErrorDictionary(): Hàm trả về giá trị trong file cấu hình Dictionary khi gặp lỗi.
    public Dictionary getErrorDictionary() {
        Dictionary errorDic = ErrorDictionary.getDictionary((String)this.getLanguage().getCode());
        if (errorDic == null) {
            errorDic = new Dictionary();
        }
        return errorDic;
    }
  • Dictionary getConfig(): Hàm trả về cấu hình
    public Dictionary getConfig() {
        if (this.config == null) {
            String key = this.getKey();
            this.config = this.getCachedDictionary(key, true);
        }
        return this.config;
    }
  • Map<String,Object> getParameters(): Hàm trả về giá trị dữ liệu request
    public Map<String, Object> getParameters() throws Exception {
        return this.getRequest().getParameterMap();
    }
    ví dụ trong WAK dùng action.getParameters().get(ADMIN) sẽ thay cho request.getParameter(ADMIN)