【问题标题】:Wicket - Add column dynamically in wicket Table检票口 - 在检票口表中动态添加列
【发布时间】:2016-12-06 11:55:07
【问题描述】:

HomePage.java

Table table = new Table();

List<String> listOfString = (List<String>) table.getList(); //accessing list from Table.java
    System.out.println("listOfString" + listOfString); //List -[name, abc, id, 101, photo, true, name, pqr, id, 102, photo, true, name, bcd, id, 103, photo, false ]

    List<UserList> listOfBean = new ArrayList<UserList>();

    System.out.println("list of my Bean" + listOfBean);
    
    
    for(int i=0;i<listOfString.size()-1;i+=2)
    {
        
    UserBean mybean = new UserBean(listOfString.get(i), listOfString.get(i+1));     
    
    listOfBean.add(mybean);
    System.out.println("list of loop bean:" + listOfBean);
        }
        
    System.out.println("list of bean:" + listOfBean);

    add(new ListView<UserBean>("listview", listOfBean) {
        protected void populateItem(ListItem<UserBean> item) {
            UserList myBean1 = item.getModelObject();
            item.add(new Label("name", myBean1.getName()));
            item.add(new Label("id", myBean1.getId()));
        }
    });

UserBean.java

public class UserList {

private String name1;
private String type1;
private Boolean photo;

Table table = new Table("table");

List<String> list1 = (List<String>) table.getList();

public UserBean(String name1,String type1)
{
    super();
    
    this.name1 = name1;
    this.type1 = type1;
    
}

public UserBean(String name1,String type1,Boolean photo)
{
    super();
    
    this.name1 = name1;
    this.type1 = type1;
    this.setPhoto(photo);
}

public String getName1() {
    return name1;
}
public void setName1(String name1) {
    this.name1 = name1;
}
public String getType1() {
    return type1;
}
public void setType1(String type1) {
    this.type1 = type1;
}

public Boolean getPhoto() {
    return photo;
}

public void setPhoto(Boolean photo) {
    this.photo = photo;
}   
}

HomePage.html

<table class="table">
<tr wicket:id="listview2">
<td><span wicket:id="name"></span></td>
<td><span wicket:id="id"></span></td>
</tr>
</table>

我正在从 Table.java 访问 HomePage.java 中的 List 值(它将数据库中的 json 转换为 LIST)。 但是使用上面的代码..我能够成功地动态添加行而不更改代码但不能动态地添加列。 每次我需要在 HomePage.java 中定义一个构造函数 UserBean.java 和实例来添加列。

谁能建议一种替代方法,如何在 ListView 中动态添加列以显示在 Wicket Table 中。

我只是一个初学者。任何帮助将不胜感激。提前谢谢你。

编辑-

Table.java

String query="select row_to_json(t) from "
            + "(select array_to_json(array_agg(row_to_json(t))) as schema from (select name,type,photo from sample) t ) t";
    
    JsonToWidget widget=new JsonToWidget();
    JSONObject json=widget.getJsonForTableContent(query);
    json.toString();
    System.out.println(json);
    
    JSONArray jsonarray = new JSONArray();
    jsonarray.toString();
    
    Iterator<String> iter=json.keys();
    JSONArray array = json.getJSONArray("schema");
    System.out.println("array"+array);
        
    while(iter.hasNext())
    {
        
        String key = iter.next();
        System.out.println("key:"+key);
        
        JSONArray value = json.getJSONArray(key);
        System.out.println("value"+value); // prints [{"name":"pqr","photo":false,"id":"101"},{"name":"bcd","photo":true,"id":"102"},{"name":"sadl","photo":false,"id":"103"},{"name":"123","photo":true,"id":"104"},{"name":"1234","photo":true,"id":"105"},{"name":"abc","photo":true,"id":"106"}]

        
        for(int i=0;i<value.length();i++)
        {
            Iterator it = value.getJSONObject(i).keys();
            
            while(it.hasNext())
            {
                String k = (String) it.next();  //prints keys in json
                String v =  value.getJSONObject(i).get(k).toString(); //prints values in json
                
                list.add(k);
                list.add(v);
                
            }               
    }
        System.out.println("array list:"+list); //prints - [name, pqr,photo, false, name, bcd, photo, true, name, sadl, photo, false, name, 123, photo, true, name, 1234 , photo, true, name, abc, photo, true] 
}
}
 public List<String> getList()
 {
   return list;
       
   }
}

是否有任何其他方法可以直接在添加 ListView 中使用 JSON 键值对(即在 HomePage.java 中添加 ListView 中读取 json)以在 Wicket 表中显示 不使用 Beans 和创建实例 所以至于从数据库中的 JSON 中动态添加列和行

【问题讨论】:

标签: java html json listview wicket


【解决方案1】:

根据我在您上一个问题中看到的内容,我认为您想做这样的事情:

主页.html

<table class="table">
    <tr wicket:id="listview2">
        <td><span wicket:id="name"></span></td>
        <td><span wicket:id="id"></span></td>
        <td><span wicket:id="hasPhoto"></span></td>
    </tr>
</table>

UserBean.java

public class UserBean {

private String name;
private String id;
private boolean hasPhoto;

public UserBean(String name, String id, boolean hasPhoto) {
    super();
    this.name = name;
    this.id = id;
    this.hasPhoto = hasPhoto;
}

public String getName() {
    return name;
}

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

public String getId() {
    return id;
}

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

public boolean isHasPhoto() {
    return hasPhoto;
}

public void setHasPhoto(boolean hasPhoto) {
    this.hasPhoto = hasPhoto;
}
}

HomePage.java

Table table = new Table();

    List<String> listOfString = (List<String>) table.getList();

    List<UserBean> listOfUserBean = new ArrayList<UserBean>();

    for (int i = 1; i < listOfString.size(); i += 6) {

        UserBean userBean = new UserBean(listOfString.get(i),
                listOfString.get(i + 2), Boolean.parseBoolean(listOfString
                        .get(i + 4)));

        listOfUserBean.add(userBean);
    }

    add(new ListView<UserBean>("listview2", listOfUserBean) {
        protected void populateItem(ListItem<UserBean> item) {
            UserBean userBean = item.getModelObject();
            item.add(new Label("name", userBean.getName()));
            item.add(new Label("id", userBean.getId()));
            item.add(new Label("hasPhoto", String.valueOf(userBean
                    .isHasPhoto())));
        }
    });

【讨论】:

  • 非常感谢您解释得这么好@m.bouali...我已经编辑了这个问题..请参考一次。您能否建议我另一种方法..不使用 bean 并动态添加行和列?
【解决方案2】:

您需要比 Java bean 更灵活的数据结构。

最简单的解决方案是改用List&lt;List&lt;Object&gt;&gt;。 IE。列表中的每个元素都是另一个列表。第一个内部列表将带来列的名称。其余元素将带来单元格值。

希望你能明白!祝你好运!

【讨论】:

  • 非常感谢....但是请您以编程方式解释一下....如何在 List> 中使用内部列表作为列并作为单元格值使用?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 2010-12-03
  • 2017-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多