簡體   English   中英

在struts 2中將java bean轉換為json數據

[英]Convert java bean to json data in struts 2

我有一個java bean類'MenuItem',它由子列表組成。 我想在jsp中顯示迭代並通過此對象渲染並顯示菜單樹。 我嘗試了json數據創建,但它需要ajax調用。 在我的情況下,我需要提交頁面而不是ajax。

我正在使用struts 2.任何人都可以建議我如何在jsp中渲染和遍歷我的bean對象?

提前致謝。

這是我的Menu bean對象:

public class MenuItem implements Serializable {    
    private static final long serialVersionUID = 8690828081102943225L;

    private Long id;
    private String name;
    private Collection<MenuItem> children;
    private String url;
    private String actionHoverLabel;
    private String actionLabel;
    private Long displayOrder;
    private Boolean isLeaf;
    private Boolean isVisible;
    private Long menuLevel;
    private Long parentId;      

    public String getActionHoverLabel() {
        return actionHoverLabel;
    }

    public void setActionHoverLabel(String actionHoverLabel) {
        this.actionHoverLabel = actionHoverLabel;
    }

    public String getActionLabel() {
        return actionLabel;
    }

    public void setActionLabel(String actionLabel) {
        this.actionLabel = actionLabel;
    }

    public Long getDisplayOrder() {
        return displayOrder;
    }

    public void setDisplayOrder(Long displayOrder) {
        this.displayOrder = displayOrder;
    }

    public Boolean getIsLeaf() {
        return isLeaf;
    }

    public void setIsLeaf(Boolean isLeaf) {
        this.isLeaf = isLeaf;
    }

    public Boolean getIsVisible() {
        return isVisible;
    }

    public void setIsVisible(Boolean isVisible) {
        this.isVisible = isVisible;
    }

    public Long getMenuLevel() {
        return menuLevel;
    }

    public void setMenuLevel(Long menuLevel) {
        this.menuLevel = menuLevel;
    }

    public Long getParentId() {
        return parentId;
    }

    public void setParentId(Long parentId) {
        this.parentId = parentId;
    }


    public MenuItem() {
        children = new ArrayList<MenuItem>();
        isVisible = true;
    }

    public MenuItem(Long id, String name) {

        this.id = id;
        this.name = name;
        children = new ArrayList<MenuItem>();
        isVisible = true;
    }

    public Long getId() {    
        return this.id;    
    }

    public void setId(Long id) {
        this.id = id;    
    }

    public String getName() {    
        return this.name;    
    }

    public void setName(String name) {    
        this.name = name;    
    }

    public Collection<MenuItem> getChildren() {

        return this.children;

    }

    public void setChildren(Collection<MenuItem> children) {    
        this.children = children;    
    }


    public boolean isLeaf() {    
        if (children != null && children.size() > 0) {    
            return false;    
        } else {    
            return true;    
        }    
    }

    public void addChild(MenuItem child) {    
        if (child != null && children != null) {    
            children.add(child);
            child.setParentId(this.getId());    
        }    
    }

    public void removeChild(MenuItem child) {    
        if (child != null && children != null) {    
            children.remove(child);
            child.setParentId(null);    
        }    
    }       

    public void setUrl(String url) {
        this.url = url;
    }

    public String getUrl() {
        if (url == null) {
            return name;
        } else {
            return url;
        }
    }


    @Override
    public boolean equals(Object obj) {
        MenuItem m = null;
        boolean isEqual = false;    
        if (id != null && id >= 0) {
            m = (MenuItem) obj;
            if (m.getId().equals(id) 
                    isEqual = true;                     
        } else {    
            isEqual = super.equals(obj);    
        }    
        return isEqual;    
    }

    @Override
    public int hashCode() {    
        if (id != null && id >= 0) {    
            return id.hashCode();    
        } else {    
            return super.hashCode();    
        }    
    }

    @Override
    public String toString() {    
        return "name: " + name + " id: " + id;    
    }

訪問www.json.org

下載用於JSON編碼的Java庫。

編譯它(為方便起見構建一個jar)。

寫一個類似於JSON的方法序列化你的bean:

 public static String toJson(SomeBean bean) 
 {
        JSONObject jo = new JSONObject(bean);
        return jo.toString();
 }

反序列化有點棘手,但應該像:

JSONObject jo = new JSONObject(jsonString);
SomeBean res = new SomeBean();

res.someProperty = jo.getString("someProperty");
res.someIntProperty= jo.getInt("someIntProperty");

顯然你必須要處理復雜的屬性,但對於簡單的bean來說,它應該像魅力一樣。

直接來源:

/**
     * Construct a JSONObject from an Object using bean getters.
     * It reflects on all of the public methods of the object.
     * For each of the methods with no parameters and a name starting
     * with <code>"get"</code> or <code>"is"</code> followed by an uppercase letter,
     * the method is invoked, and a key and the value returned from the getter method
     * are put into the new JSONObject.
     *
     * The key is formed by removing the <code>"get"</code> or <code>"is"</code> prefix.
     * If the second remaining character is not upper case, then the first
     * character is converted to lower case.
     *
     * For example, if an object has a method named <code>"getName"</code>, and
     * if the result of calling <code>object.getName()</code> is <code>"Larry Fine"</code>,
     * then the JSONObject will contain <code>"name": "Larry Fine"</code>.
     *
     * @param bean An object that has getter methods that should be used
     * to make a JSONObject.
     */
    public JSONObject(Object bean) {
        this();
        this.populateMap(bean);
    }

你確定你已經正確設置了所有東西(Classpath)嗎?

如果你想在JSP中操作bean,你可以使用struts標簽來做到這一點。 bean必須在范圍內。

在這種情況下,為什么需要JSON? 如果您仍然需要JSON,請檢查GSON庫和Jackson映射器庫。 在JSP上,您可以將JSON對象存儲在變量中,然后對其進行操作。 在頁面提交Struts操作將形成JSON,然后在頁面bean變量中設置它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM