give a Component more than one DataModel
----------------------------------------
Key: JBSEAM-93
URL:
http://jira.jboss.com/jira/browse/JBSEAM-93
Project: JBoss Seam
Issue Type: Feature Request
Components: Core
Affects Versions: 1.0 beta 1
Environment: normal
Reporter: ya xiang
Attachments: Component.java, DataModel2.java
Original Estimate: 1 hour
Remaining Estimate: 1 hour
sometimes I need place more than one DataModel in one component control object.
but at present, Componenent can only do a single DataModel.
can model DataModel annotation and Component let it support multiple DataModel.
I have a simple solution without modified exist model and application, just add
DataModel2 annotation. and remain origin DataModel and its usage.
code as follows:
/**
* FIXME:added by xiangya
*/
private Set<Field> dataModelFields = new HashSet<Field>();
public void inject(Object bean/*, boolean isActionInvocation*/)
{
injectMethods(bean/*, isActionInvocation*/);
injectFields(bean/*, isActionInvocation*/);
injectDataModelSelection(bean);
injectDataModels(bean);
}
public void outject(Object bean)
{
outjectMethods(bean);
outjectFields(bean);
outjectDataModel(bean);
outjectDataModels(bean);
}
//TODO: submit;
private void injectDataModels(Object bean) {
Field selectionIndexField=null, selectionField=null;
for (Field field : dataModelFields)
{
DataModel2 dm = field.getAnnotation(DataModel2.class);
String name = toName(dm.value(), field);
javax.faces.model.DataModel dataModel =
(javax.faces.model.DataModel)Contexts.getConversationContext().get(name);
if (dataModel!=null){
if (dm.selectionIndex().length()>0){
try{
selectionIndexField =beanClass.getDeclaredField(dm.selectionIndex());
log.info(selectionIndexField);
selectionIndexField.setAccessible(true);
setFieldValue(bean, selectionIndexField, name,
dataModel.getRowIndex());
}catch (NoSuchFieldException e) {
log.info(String.format("can not found DataModelSelectionIndex %s in
DataModel %s ",
dm.value(), dm.selectionIndex()));
}
}
if (dm.selection().length()>0){
try{
selectionField = beanClass.getDeclaredField(dm.selection());
log.info(selectionIndexField);
selectionField.setAccessible(true);
setFieldValue(bean, selectionField, name, dataModel.getRowData());
}catch(NoSuchFieldException e){
log.info(String.format("can not found DataModelSelection %s in
DataModel %s", dm.value(), dm.selection()));
}
}
}
}
}
private void outjectDataModels(Object bean) {
List list=null;
for(Field field: dataModelFields){
list = (List) getFieldValue(bean, field);
name = toName(field.getAnnotation(DataModel2.class).value(), field);
if (list!=null)
{
ListDataModel dataModel = new org.jboss.seam.jsf.ListDataModel(list);
Contexts.getConversationContext().set( name, dataModel );
}
else
{
Contexts.getConversationContext().remove(name);
}
}
}
//TODO: submit;
oooh, maybe I should create a patch.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: