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);

    });
  • 相关阅读:
    ACM ICPC 2008–2009 NEERC MSC A, B, C, G, L
    POJ 1088 滑雪 DP
    UVA 11584 最短回文串划分 DP
    POJ 2531 Network Saboteur DFS+剪枝
    UVa 10739 String to Palindrome 字符串dp
    UVa 11151 Longest Palindrome 字符串dp
    UVa 10154 Weights and Measures dp 降维
    UVa 10271 Chopsticks dp
    UVa 10617 Again Palindrome 字符串dp
    UVa 10651 Pebble Solitaire 状态压缩 dp
  • 原文地址:https://www.cnblogs.com/meetrice/p/1548507.html
Copyright © 2011-2022 走看看