0

Spring MVC3、Hibernate、および Ext Js で設計されたアプリケーションを作成しました。本の図書館です。私はEclipse IDEを使用しています。app という名前の extjs アプリケーションを作成した WebContent フォルダーに、extjs ファイルもアップロードしました。私のアプリケーションには、コントローラー、モデル、ストア、ビューの 4 つのパッケージが含まれています。

コントローラ Books.js:

Ext.define('ExtJS.controller.Books', {
extend: 'Ext.app.Controller',

stores: ['Books'],

models: ['Book'],

views: ['book.Edit', 'book.List'],

refs: [{
        ref: 'booksPanel',
        selector: 'panel'
    },{
        ref: 'booklist',
        selector: 'booklist'
    }
],

init: function() {
    this.control({
        'booklist dataview': {
            itemdblclick: this.editUser
        },
        'booklist button[action=add]': {
            click: this.editUser
        },
        'booklist button[action=delete]': {
            click: this.deleteUser
        },
        'bookedit button[action=save]': {
            click: this.updateUser
        }
    });
},

editUser: function(grid, record) {
    var edit = Ext.create('ExtJS.view.book.Edit').show();

    if(record){
        edit.down('form').loadRecord(record);
    }
},

updateUser: function(button) {
    var win    = button.up('window'),
        form   = win.down('form'),
        record = form.getRecord(),
        values = form.getValues();


    if (values.id > 0){
        record.set(values);
    } else{
        record = Ext.create('ExtJS.model.Book');
        record.set(values);
        record.setId(0);
        this.getBooksStore().add(record);
    }

    win.close();
    this.getBooksStore().sync();
},

deleteUser: function(button) {

    var grid = this.getBooklist(),
    record = grid.getSelectionModel().getSelection(), 
    store = this.getBooksStore();

    store.remove(record);
    this.getBooksStore().sync();
}
});

モデル Book.js:

Ext.define('ExtJS.model.Book', {
extend: 'Ext.data.Model',
fields: ['id', 'title', 'author', 'publisher', 'isbn', 'pages', 'category', 'qty']
});

Books.js を保存します。

Ext.define('ExtJS.store.Books', {
extend: 'Ext.data.Store',
model: 'ExtJS.model.Book',
autoLoad: true,
pageSize: 35,
autoLoad: {start: 0, limit: 35},

proxy: {
    type: 'ajax',
    api: {
        read : 'books/view.action',
        create : 'books/create.action',
        update: 'books/update.action',
        destroy: 'books/delete.action'
    },
    reader: {
        type: 'json',
        root: 'data',
        successProperty: 'success'
    },
    writer: {
        type: 'json',
        writeAllFields: true,
        encode: false,
        root: 'data'
    },
    listeners: {
        exception: function(proxy, response, operation){
            Ext.MessageBox.show({
                title: 'REMOTE EXCEPTION',
                msg: operation.getError(),
                icon: Ext.MessageBox.ERROR,
                buttons: Ext.Msg.OK
            });
        }
    }
}
});

ビューには Viewport.js が含まれています。

Ext.define('ExtJS.view.Viewport', {
extend: 'Ext.container.Viewport'
});

そして、私が持っている book という名前のフォルダー:

List.js:

Ext.define('ExtJS.view.book.List' ,{
extend: 'Ext.grid.Panel',
alias : 'widget.booklist',

//requires: ['Ext.toolbar.Paging'],

iconCls: 'icon-grid',

title : 'Books',
store: 'Books',

columns: [{
    header: "Title",
    width: 50,
    flex:1,
    dataIndex: 'title'
},{
    header: "Author",
    width: 50,
    flex:1,
    dataIndex: 'author'
},{
    header: "Publisher",
    width: 50,
    flex:1,
    dataIndex: 'publisher'
},{
    header: "Isbn",
    width: 50,
    flex:1,
    dataIndex: 'isbn'
},{
    header: "Pages",
    width: 50,
    flex:1,
    dataIndex: 'pages'
},{
    header: "Category",
    width: 50,
    flex:1,
    dataIndex: 'category'
},{
    header: "Qty",
    width: 50,
    flex:1,
    dataIndex: 'qty'
}],

initComponent: function() {

    this.dockedItems = [{
        xtype: 'toolbar',
        items: [{
            iconCls: 'icon-save',
            itemId: 'add',
            text: 'Add',
            action: 'add'
        },{
            iconCls: 'icon-delete',
            text: 'Delete',
            action: 'delete'
        }]
    },
    {
        xtype: 'pagingtoolbar',
        dock:'top',
        store: 'Books',
        displayInfo: true,
        displayMsg: 'Displaying books {0} - {1} of {2}',
        emptyMsg: "No books to display"
    }];

    this.callParent(arguments);
}
});

Edit.js:

Ext.define('ExtJS.view.book.Edit', {
extend: 'Ext.window.Window',
alias : 'widget.bookedit',

requires: ['Ext.form.Panel','Ext.form.field.Text'],

title : 'Edit Book',
layout: 'fit',
autoShow: true,
width: 280,

iconCls: 'icon-user',

initComponent: function() {
    this.items = [
        {
            xtype: 'form',
            padding: '5 5 0 5',
            border: false,
            style: 'background-color: #fff;',

            fieldDefaults: {
                anchor: '100%',
                labelAlign: 'left',
                allowBlank: false,
                combineErrors: true,
                msgTarget: 'side'
            },

            items: [
                {
                    xtype: 'textfield',
                    name : 'id',
                    fieldLabel: 'id',
                    hidden:true
                },    
                {
                    xtype: 'textfield',
                    name : 'title',
                    fieldLabel: 'Title'
                },
                {
                    xtype: 'textfield',
                    name : 'author',
                    fieldLabel: 'Author'
                },   
                {
                    xtype: 'textfield',
                    name : 'publisher',
                    fieldLabel: 'Publisher'
                },
                {
                    xtype: 'textfield',
                    name : 'isbn',
                    fieldLabel: 'Isbn'
                },
                {
                    xtype: 'textfield',
                    name : 'pages',
                    fieldLabel: 'Pages'
                },
                {
                    xtype: 'textfield',
                    name : 'category',
                    fieldLabel: 'Category'
                },
                {
                    xtype: 'textfield',
                    name : 'qty',
                    fieldLabel: 'Qty'
                }
            ]
        }
    ];

    this.dockedItems = [{
        xtype: 'toolbar',
        dock: 'bottom',
        id:'buttons',
        ui: 'footer',
        items: ['->', {
            iconCls: 'icon-save',
            itemId: 'save',
            text: 'Save',
            action: 'save'
        },{
            iconCls: 'icon-reset',
            text: 'Cancel',
            scope: this,
            handler: this.close
        }]
    }];

    this.callParent(arguments);
}
});

私のapp.js:

Ext.application({
name: 'ExtJS',

controllers: [
    'Books'
],

launch: function() {
    Ext.create('Ext.container.Viewport', {
        layout: 'fit',
        items: [
            {
                xtype: 'booklist'
            }
        ]
    });
}
});

store/Books.js からのエラー「リ​​モート例外」がスローされます。何が問題なのかわかりません。

編集:

問題は、「データベースから書籍を取得中にエラーが発生しました」です。それはJavaコントローラーから来ます:

@Controller

パブリック クラス BookController {

private BookService bookService;

@RequestMapping(value="/books/view.action")
public @ResponseBody Map<String,? extends Object> view(@RequestParam int start, @RequestParam int limit) throws Exception {

    try{

        List<Book> books = bookService.getBookList(start,limit);

        int total = bookService.getTotalBooks();

        return ExtJSReturn.mapOK(books, total);

    } catch (Exception e) {

        return ExtJSReturn.mapError("Error retrieving books from database.");
    }
}

BookService.java メソッドも参照してください。

    @Transactional(readOnly=true)
public List<Book> getBookList(int start, int limit){

    return bookDAO.getBooks(start, limit);
}

    public int getTotalBooks(){

    return bookDAO.getTotalBooks();
}

BookDAO.java メソッドを参照してください。

    @SuppressWarnings("unchecked")
public List<Book> getBooks(int start, int limit) {

    DetachedCriteria criteria = DetachedCriteria.forClass(Book.class);

    return hibernateTemplate.findByCriteria(criteria, start, limit);
}

    public int getTotalBooks(){
    return DataAccessUtils.intResult(hibernateTemplate.find("SELECT COUNT(*) FROM books"));
}

何か案が?

4

1 に答える 1

0

問題は次のとおりです。

org.springframework.orm.hibernate3.HibernateQueryException: books is not mapped [SELECT COUNT(*) FROM books]; nested exception is org.hibernate.hql.ast.QuerySyntaxException: books is not mapped [SELECT COUNT(*) FROM books]

ここで修正: https://stackoverflow.com/a/14447201/1564840

于 2013-01-21T19:30:20.163 に答える