zoukankan      html  css  js  c++  java
  • 基于注解的表单生成

    package javacommon.util;

    import java.lang.annotation.Documented;
    import java.lang.annotation.Inherited;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Target;
    @Documented
    @Target({ElementType.CONSTRUCTOR, ElementType.METHOD})
    @Retention(RetentionPolicy.RUNTIME)
    @Inherited
    public @interface ExtField {
        String xtype()
    default "textfield";
        String store()
    default "";
        String valueField()
    default "";
        String displayField()
    default "";
        String triggerAction()
    default "";
        String mode()
    default "";
        String width();
        
    boolean allowBlank();
        
    boolean readOnly();
    }

    Model中的使用方法

        @Column(name = "DJ", unique = false, nullable = true, insertable = true, updatable = true, length = 1)
        @ExtField(xtype
    ="combo", store="gender",valueField = "valuefield",displayField="displayfield",mode="local", triggerAction="all", width="233", allowBlank = false, readOnly = true)
        
    public java.lang.String getGender() {
            
    return this.gender;
        }

    根据注解输出json的方法

    public void extGenFormFieldByAnnotation() throws IOException
        {
        
            Users  currentUser 
    = (Users)getRequest().getSession().getAttribute("currentUser");
            Kss kss 
    = kssManager.getById(currentUser.getJsbh());
            List result 
    = new ArrayList(); 
            Class c 
    = Kss.class;
            JavaClass javaClass 
    = new JavaClass(c);
            
    try
            {
                List list 
    = javaClass.getFields();
                
    for (int i = 0; i < list.size(); i++)
                {
                    JavaField javaField 
    = (JavaField)list.get(i);
                    
    if (javaField.getFieldName().startsWith("ALIAS"))
                    {
                            String str 
    = c.getDeclaredField(javaField.getFieldName()).get(null).toString();
                            
    if (!javaField.getFieldName().substring(6).toLowerCase().equals("id"))
                            {
                                Method method 
    = c.getMethod("get"+StringHelper.makeAllWordFirstLetterUpperCase(javaField.getFieldName().substring(6).toLowerCase()));
                                 Map map 
    = new HashMap();
                                 
    if(method.isAnnotationPresent(ExtField.class)) {
                                     ExtField extField 
    = method.getAnnotation(ExtField.class);
                                       
    if (!extField.xtype().equals("textfield")) {map.put("xtype",extField.xtype());}
                                       
    if (!extField.store().equals("")) {
                                           map.put(
    "store",ComboStoreUtil.getMapList(extField.store()));
                                       }
                                       
    if (!extField.valueField().equals("")) {map.put("valueField",extField.valueField());}
                                       
    if (!extField.displayField().equals("")) {map.put("displayField",extField.displayField());}
                                       
    if (!extField.mode().equals("")) {map.put("mode",extField.mode());}
                                       
    if (!extField.triggerAction().equals("")) {map.put("triggerAction",extField.triggerAction());}
                                        map.put(
    "fieldLabel",str);
                                        map.put(
    "name",str);
                                        map.put(
    "width",extField.width());
                                        map.put(
    "allowBlank", extField.allowBlank());
                                        map.put(
    "readOnly", extField.readOnly());
                                        map.put(
    "value",method.invoke(kss));
                                 }
                                 
    else {
                                        map.put(
    "fieldLabel",str);
                                        map.put(
    "name",str);
                                        map.put(
    "width",288);
                                        map.put(
    "value",method.invoke(kss));
                                 }

                                
                                result.add(map);
                            }
                    }
                }
            }
            
    catch (Exception e)
            {
                e.printStackTrace();
            }
            
            outJsonArray(result);
        }

    测试的返回list方法

    package javacommon.util;

    import java.sql.Array;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;

    public class ComboStoreUtil {

        
    public static List getMapList(String maptype){
            List result 
    = new ArrayList(); 
            Map map 
    =  new HashMap();
            map.put(
    "valuefield","m");
            map.put(
    "displayfield","");
            Map map2 
    =  new HashMap();
            map2.put(
    "valuefield","f");
            map2.put(
    "displayfield","");
            result.add(map);
            result.add(map2);
            
    return result;
            
        }

    }

    combo简单store定义扩展:

    Ext.ux.ComboBox = function(config) {
        
    if (Ext.isArray(config.store)) {
                
    var store = [];
                
    for (var i = 0, len = config.store.length; i < len; i++)
                    store[i] 
    = [config.store[i]];
                config.store 
    = new Ext.data.JsonStore({
                            fields : [
    'valuefield''displayfield'],
                            data : config.store
                        });
                config.valueField 
    = 'valuefield';
                config.displayField 
    = 'displayfield';
        }
        Ext.ux.ComboBox.superclass.constructor.call(
    this, config);
    }
    Ext.extend(Ext.ux.ComboBox, Ext.form.ComboBox, {

    });
    Ext.reg(
    'combo', Ext.ux.ComboBox);

    Ext界面代码

    Ext.onReady(function() {
        Ext.BLANK_IMAGE_URL 
    = "http://www.cnblogs.com/widgets/ext-2.2.1/resources/images/default/s.gif";
        Ext.QuickTips.init();
        Ext.form.Field.prototype.msgTarget 
    = 'qtip';
        
    var simple = new Ext.FormPanel({
                    labelWidth : 
    100
                    url : 
    'save-form.do',
                    frame : 
    true,
                    id : 
    'dynaForm',
                    labelAlign : 
    'right',
                    title : 
    '动态表单',
                    bodyStyle : 
    'padding:5px 5px 0',
                    style : 
    'margin-top:20px;margin-left:'
                            
    + ((document.body.clientWidth - 550/ 2)
                            
    + 'px;padding-bottom:20px;',
                    width : 
    550,
                    defaults : {
                        width : 
    230
                    },
                    defaultType : 
    'textfield',
                    autoLoad : {
                        url : 
    '../JsonAction/extGenFormByAnnotation.do',
                        renderer : {
                            render : 
    function(el, response, updater, callback) {
                                
    var form;
                                
    if (form = Ext.getCmp('dynaForm')) {
                                    form.add
                                            .apply(
                                                    form,
                                                    []
                                                            .concat(Ext
                                                                    .decode(response.responseText)));
                                    form.doLayout();
                                }

                                
    if (callback)
                                    callback();
                            }
                        }
                    },
                    doAutoLoad : 
    function() {
                        
    var u = this.body.getUpdater();
                        
    if (this.autoLoad.renderer) {
                            u.showLoadIndicator 
    = false// important!
                            u.setRenderer(this.autoLoad.renderer);
                            
    delete this.autoLoad.renderer;
                        }
                        u.update(
    typeof this.autoLoad == 'object'
                                        
    ? this.autoLoad
                                        : {
                                            url : 
    this.autoLoad
                                        });

                    },
                    buttons : [{
                                text : 
    '保存'
                            }, {
                                text : 
    '重置'
                            }]
                });

        simple.render(document.body);

    });
  • 相关阅读:
    位军营 20190919-4 测试,结对要求
    位军营 20190919-5 代码规范,结对要求
    国内源
    hexo安装-nodejs
    python调用chrome打开指定网址
    生成证书,用于签名Android应用
    cygwin64-安装包管理工具
    Android-删除指定包名的App
    pyqt5加载网页的简单使用
    打包python到exe
  • 原文地址:https://www.cnblogs.com/meetrice/p/1548507.html
Copyright © 2011-2022 走看看