dynamiceditgridbean.java

来自「OperaMasks是一种基于J2EE的Web开发技术」· Java 代码 · 共 190 行

JAVA
190
字号
/*
 * $Id: DynamicEditGridBean.java,v 1.5 2008/11/19 01:31:48 libin Exp $
 *
 * Copyright (C) 2006 Operamasks Community.
 * Copyright (C) 2000-2006 Apusic Systems, Inc.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses.
 */
package demo.grid.dynamic;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import javax.faces.FacesException;
import javax.faces.component.UISelectItems;

import org.operamasks.faces.annotation.Action;
import org.operamasks.faces.annotation.BeforeRender;
import org.operamasks.faces.annotation.Bind;
import org.operamasks.faces.annotation.ComponentAttributes;
import org.operamasks.faces.annotation.ManagedBean;
import org.operamasks.faces.annotation.ManagedBeanScope;
import org.operamasks.faces.annotation.ManagedProperty;
import org.operamasks.faces.component.form.impl.UICombo;
import org.operamasks.faces.component.form.impl.UIDateField;
import org.operamasks.faces.component.form.impl.UIField;
import org.operamasks.faces.component.form.impl.UINumberField;
import org.operamasks.faces.component.form.impl.UITextField;
import org.operamasks.faces.component.grid.CellEditor;
import org.operamasks.faces.component.grid.CellEditorAdapter;
import org.operamasks.faces.component.grid.CellEditorFactory;
import org.operamasks.faces.component.grid.CellSelectionModel;
import org.operamasks.faces.component.grid.GridColumn;
import org.operamasks.faces.component.grid.GridColumnModel;
import org.operamasks.faces.component.grid.impl.UIDataGrid;
import org.operamasks.faces.component.grid.impl.UIEditDataGrid;
import org.operamasks.faces.component.grid.provider.GridRowDataProvider;
import org.operamasks.faces.component.grid.provider.GridViewProvider;

import demo.grid.GridBeanHelper;
import demo.grid.GridDataModel;
import demo.grid.GridDataModel.TrainRecord;

@ManagedBean(scope = ManagedBeanScope.REQUEST)
@SuppressWarnings( { "unused", "serial" })
public class DynamicEditGridBean {
	public DynamicEditGridBean() {
		Map<String, Object> config = new HashMap<String, Object>();
		config.put("paged", Boolean.TRUE);
		config.put("rows", new Integer(5));
		this.gridConfig = config;
	}

	@ManagedProperty("#{GridDataModel}")
	private GridDataModel model;

	@SuppressWarnings("unchecked")
	@Bind(id = "grid", attribute = "value")
	private List data = GridDataModel.trainRecord;

	@ComponentAttributes(id = "grid")
	private Map<String, Object> gridConfig;

	@Bind(id = "grid", attribute = "viewProvider")
	private GridViewProvider provider = GridBeanHelper.getTrainViewProvider();

	@Bind(id = "grid", attribute = "rowDataProvider")
	private GridRowDataProvider rowProvider = GridBeanHelper
			.getTrainRowProvider();

	@Bind(id = "grid")
	private UIEditDataGrid grid;

	@Bind(id = "grid", attribute = "addedData")
	private Object addedData;
	@Bind(id = "grid", attribute = "modifiedData")
	private Object modifiedData;
	@Bind(id = "grid", attribute = "removedData")
	private Object removedData;
	@Bind(id = "grid", attribute = "bindBean")
	private String bindBean = "demo.grid.GridDataModel$TrainRecord";

	javax.faces.model.SelectItem[] trainItems = {
			new javax.faces.model.SelectItem("Server Train", "应用服务器培训"),
			new javax.faces.model.SelectItem("MQ Train", "MQ服务器培训"),
			new javax.faces.model.SelectItem("Apusic Studio Train",
					"Apusic Studio培训"),
			new javax.faces.model.SelectItem("AOM Train", "AOM使用培训"), };

	@BeforeRender
	public void pageLoad(boolean isPostBack) {
		if (!isPostBack) {
			GridColumnModel model = grid.getColumnModel();
			model.getColumn(0).setCellEditor(
					createCellEditor(UITextField.COMPONENT_TYPE));
			model.getColumn(1).setCellEditor(createComboCellEditor());
			model.getColumn(2).setCellEditor(
					createCellEditor(UINumberField.COMPONENT_TYPE));
			model.getColumn(3).setCellEditor(
					createCellEditor(UIDateField.COMPONENT_TYPE));
		}
	}

	@Action(id = "add")
	public void insert() {
		grid.insertRow(0);
	}

	@Action(id = "addWithData")
	public void insertWithData() {
		grid.insertRow(0, new TrainRecord("new item", "Server Train", 3));
	}

	@Action(id = "remove")
	public void remove() {
		grid.remove();
	}

	@Action(id = "save")
	public void save() {
		try {
			if (addedData != null) {
				add((TrainRecord[]) addedData);
			}
			if (modifiedData != null) {
				update((TrainRecord[]) modifiedData);
			}
			if (removedData != null) {
				remove((TrainRecord[]) removedData);
			}
			grid.commit();
			grid.reload();
		} catch (Exception e) {
			throw new FacesException(e);
		}
	}

	private void remove(GridDataModel.TrainRecord[] data) {
		for (GridDataModel.TrainRecord record : data) {
			model.trainRecord.remove(model.getDataById(record.getId()));
		}
	}

	private void update(GridDataModel.TrainRecord[] data) {
		for (GridDataModel.TrainRecord record : data) {
			model.updateValue(record);
		}
	}

	private void add(GridDataModel.TrainRecord[] data) {
		for (GridDataModel.TrainRecord record : data) {
			record.setId(UUID.randomUUID().toString());
			model.trainRecord.add(record);
		}
	}

	private CellEditor createComboCellEditor() {
		CellEditorAdapter adapter = CellEditorAdapter.getInstance();
		CellEditorFactory fac = adapter
				.getCellEditorFactory(UICombo.COMPONENT_TYPE);
		UISelectItems items = new UISelectItems();
		items.setValue(trainItems);
		((UICombo) fac).getChildren().add(items);
		return fac.getCellEditor();
	}

	private CellEditor createCellEditor(String componentType) {
		CellEditorAdapter adapter = CellEditorAdapter.getInstance();
		CellEditorFactory fac = adapter.getCellEditorFactory(componentType);
		if (fac instanceof UITextField) {
			((UITextField) fac).setAllowBlank(false);
		}
		return fac.getCellEditor();
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?