我有要求逐列填充可用選項列表。
我有一個左側面板和右側面板4列的區域列表和
10行。現在,如果我選擇有12個選項的區域「X」,則第一列應該全部填充
,第二列只有2行。我找不到任何有用的鏈接
幫助我找出解決問題的方法。有什麼辦法可以在JSF或Primefaces中實現
。如何通過遍歷primefaces中的列表動態地逐列填充列
-2
A
回答
3
因爲你沒有說明該列/行必須顯示具體型號如屬性,id
,name
,max
,min
或什麼的,我以爲你只是想在你的二維表列舉的典範。我不認爲有一個JSF/Primefaces的方式來做到這一點。我的解決方案是在將數據返回到視圖之前對其進行預處理。那也是你對模型擁有最大控制權的時刻。當然,這不是最優雅的方式,但使用JSF/PF時我看不到另一種方式。 處理:
1)只要每行後追加一個「空」的模型元素(我用String
S),直至達到
2.最大colums)執行,每行這是「1更多項目「,例如22項 - >第一2行需要1個空項目更少
3.)加滿油其他行以完成空項
4)。使用標準的JSF/PF UI組件。
這個小的不好/醜陋/黑客代碼被剪斷可能會讓你有預處理的想法。
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class Test {
static int columns = 4;
static int rows = 10;
public static void main(String[] args) {
for (int i = 0; i < 10; i ++) {
List<String> strings = new ArrayList<String>();
populate(strings);
int before = strings.size();
process(strings);
int after = strings.size();
print(before, after, strings);
}
}
private static void print(int before, int after, List<String> strings) {
System.out.println(before + " ================ " + after);
for (int row = 0; row < rows; row++) {
for (int col = 0; col < columns; col++) {
int index = row * columns + col;
System.out.print(strings.get(index) + " ");
}
System.out.println();
}
System.out.println("=====================");
}
private static void process(List<String> strings) {
int regionsSize = strings.size();
// how much rows have to be filled with 1 empty item less
int rowsWithMoreToAdd = regionsSize % rows;
// where we need to insert the empty item
int index = (int) Math.floor(regionsSize/rows);
String emptyOption = " ";
// insert one empty item less in these rows
for (int i = 0; i < rowsWithMoreToAdd; i++) {
// insert empty items until the last column
for (int ii = index + 1; ii < columns; ii++) {
strings.add(ii + i * columns, emptyOption);
}
}
// insert empty items in thes rows
for (int i = rowsWithMoreToAdd; i < rows; i++) {
// insert empty items until the last column
for (int ii = index; ii < columns; ii++) {
strings.add(i * columns + ii, emptyOption);
}
}
}
private static void populate(List<String> strings) {
int random = new Random().nextInt(rows * columns);
for (int i = 0; i < random; i++) {
strings.add("bla");
}
}
}
一些示例輸出:
13 ================ 40
bla bla
bla bla
bla bla
bla
bla
bla
bla
bla
bla
bla
24 ================ 40
bla bla bla
bla bla bla
bla bla bla
bla bla bla
bla bla
bla bla
bla bla
bla bla
bla bla
bla bla
34 ================ 40
bla bla bla bla
bla bla bla bla
bla bla bla bla
bla bla bla bla
bla bla bla
bla bla bla
bla bla bla
bla bla bla
bla bla bla
bla bla bla
2
這是我的建議:
的index.xhtml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:p="http://primefaces.org/ui"
xmlns:o="http://omnifaces.org/ui">
<h:body>
<h:form>
<p:panelGrid columns="#{testBean2.model.cols}">
<c:forEach var="elem" items="#{testBean2.model.list}">
<h:outputText value="#{elem}"/>
</c:forEach>
</p:panelGrid>
<p:commandButton action="#{testBean2.select12}" update="@form" value="select 12" />
<p:commandButton action="#{testBean2.select24}" update="@form" value="select 24" />
</h:form>
</h:body>
</html>
TestBean2.java
@ManagedBean
@ViewScoped
public class TestBean2 implements Serializable
{
private static final long serialVersionUID = 1L;
private TransposedTableModel<String> model;
@PostConstruct
public void init()
{
select12();
}
public void select12()
{
model = new TransposedTableModel<String>();
for(int i = 0; i < 12; i++)
{
model.add("value " + (i + 1));
}
}
public void select24()
{
model = new TransposedTableModel<String>();
for(int i = 0; i < 24; i++)
{
model.add("value " + (i + 1));
}
}
public TransposedTableModel<String> getModel()
{
return model;
}
}
TransposedTableModel.java
public class TransposedTableModel<T>
{
private final List<T>[] model;
private int index;
public TransposedTableModel()
{
model = new ArrayList[10];
for(int i = 0; i < 10; i++)
{
model[i] = new ArrayList<>();
}
index = 0;
}
public void add(T value)
{
model[index++ % 10].add(value);
}
public List<T> getList()
{
List<T> list = new ArrayList<>();
int cols = model[0].size();
list.addAll(model[0]);
for(int i = 1; i < 10; i++)
{
List<T> row = model[i];
for(int j = 0; j < cols; j++)
{
list.add(j < row.size() ? row.get(j) : null);
}
}
return list;
}
public int getCols()
{
return model[0].size();
}
}
相關問題
- 1. 如何通過hashmap值遍歷列表
- 2. 動態填充UnOrdered列表
- 3. 動態填充列表框
- 4. 動態填充列表(jQuery)
- 5. 如何通過遍歷列來創建字典/散列表?
- 6. 遍歷列表的列表?
- 7. 遍歷動態類型的列表
- 8. 如何通過array_agg遍歷迭代列?
- 9. 通過列表進行遍歷和動態創建彙總行
- 10. 如何在MVC3中動態地填充下拉列表?
- 11. 動態填充Div中的列表
- 12. Zipp在Python中通過遍歷列表清單列表
- 13. 通過列表遍歷函數
- 14. 通過遍歷列表使用jQuery
- 15. 遍歷通用列表java
- 16. 循環遍歷選定的用戶並動態填充下拉列表
- 17. 如何動態地填充文件內容的列表框?
- 18. 遍歷列表
- 19. 遍歷列表
- 20. 遍歷列表
- 21. 遍歷列表
- 22. 遍歷列表
- 23. 如何做列表遍歷?
- 24. 如何遍歷ID列表
- 25. 通過列表循環遍歷列表並刪除相同的
- 26. 有沒有辦法從多個列表中填充dataGridView而不遍歷列表?
- 27. 如何遍歷列表視圖列
- 28. 如何動態填充NSOutlineView的列?
- 29. 遍歷SharePoint列表中的列表2013
- 30. 如何在Java中填充通用列表的列表?
答:是的,有。 –
http://www.mkyong.com/jsf2/jsf-2-0-ajax-hello-world-example/ –
謝謝Mr.J4mes。我可以在ajax調用中顯示區域特定的選項,但是我的問題是如何以我詢問的格式表示數據。你能否試着爲實際問題提出建議。 –