国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

[翻譯]Play框架1.2.7版本教程(7) - 通過(guò)CRUD來(lái)實(shí)現(xiàn)一個(gè)基本的管理面板

騫諱護(hù) / 832人閱讀

摘要:通過(guò)來(lái)實(shí)現(xiàn)一個(gè)基本的管理面板目前,我們還沒法使用博客的來(lái)寫新的文章,或修改評(píng)論。提供了一個(gè)即開即用的模塊,可以快速生成一個(gè)基本的管理面板。這是因?yàn)槟J(rèn)是以的輸出來(lái)得到一個(gè)模型對(duì)象的表示。在本教程的最后一章,你會(huì)學(xué)到關(guān)于本地化信息的更多東西。

通過(guò)CRUD來(lái)實(shí)現(xiàn)一個(gè)基本的管理面板

目前,我們還沒法使用博客的UI來(lái)寫新的文章,或修改評(píng)論。Play提供了一個(gè)即開即用的CRUD模塊,可以快速生成一個(gè)基本的管理面板。

啟動(dòng)CRUD模塊

一個(gè)Play應(yīng)用可以由幾個(gè)模塊組裝起來(lái)。這使得你可以在不同應(yīng)用間重用組件或分割一個(gè)大應(yīng)用到幾個(gè)小的。

CRUD模塊是一個(gè)通用的應(yīng)用,可以對(duì)模型類進(jìn)行內(nèi)省生成簡(jiǎn)單的列表和表單。

要啟動(dòng)CRUD模塊,在/conf/dependencies.ymlrequire后面添加一行:(注意play后面的箭頭兩邊需要留空格?。?/p>

require:
    - play
    - play -> crud

現(xiàn)在運(yùn)行play dependencies命令,來(lái)解決新的模塊依賴關(guān)系。如果正用著IDE,你應(yīng)該更新項(xiàng)目配置,來(lái)包括新的模塊依賴:比如,運(yùn)行play eclipsify,在Eclipse里重新導(dǎo)入項(xiàng)目,然后按F5刷新項(xiàng)目。

然后這個(gè)模塊提供一系列現(xiàn)在就能用上的路由。要導(dǎo)入這些路由,在/yabe/conf/routes加入:

# Import CRUD routes
*      /admin              module:crud

這將導(dǎo)入所有的CRUD路由,并以/admin作為URL前綴。

你需要重啟應(yīng)用來(lái)使得新模塊的導(dǎo)入生效。

聲明CRUD控制器

對(duì)于每個(gè)想集成到管理面板的模型,我們得聲明一個(gè)繼承自controllers.CRUD的控制器。這很簡(jiǎn)單。

給每個(gè)模型創(chuàng)建各創(chuàng)建一個(gè)控制器。比如,對(duì)于Post類,在/yabe/app/controllers/Posts.java創(chuàng)建一個(gè)Posts控制器。

package controllers;

import play.*;
import play.mvc.*;

public class Posts extends CRUD {    
}
  

默認(rèn)控制器的命名,是其對(duì)應(yīng)的模型的復(fù)數(shù)。這樣,Play就能自動(dòng)搭配每個(gè)控制器和對(duì)應(yīng)的模型。如果你需要指定特別的名字,你可以使用@CRUD.For注解。閱讀CRUD文檔。

同樣創(chuàng)建其他的控制器:

package controllers;

import play.*;
import play.mvc.*;

public class Users extends CRUD {    
}
package controllers;

import play.*;
import play.mvc.*;

public class Comments extends CRUD {    
}
package controllers;

import play.*;
import play.mvc.*;

public class Tags extends CRUD {    
}

現(xiàn)在打開http://localhost:9000/admin/,你應(yīng)該看到管理面板。

如果仔細(xì)看,你將注意到列表中對(duì)象的名字有點(diǎn)奇怪。這是因?yàn)槟J(rèn)是以toString()的輸出來(lái)得到一個(gè)模型對(duì)象的表示。

所以,通過(guò)提供定制的toString(),我們就能解決這個(gè)問題。舉個(gè)例子,對(duì)于User類:

…
public String toString() {
    return email;
}
…
添加驗(yàn)證

通常使用管理面板的問題是,提交的表單沒有經(jīng)過(guò)恰當(dāng)?shù)尿?yàn)證。但因?yàn)镃RUD模塊可以從驗(yàn)證注解提取出驗(yàn)證規(guī)則,所以如果模型類得到正確注解,就不會(huì)有問題。

讓我們給User類添加一些注解。

package models;

import java.util.*;
import javax.persistence.*;

import play.db.jpa.*;
import play.data.validation.*;

@Entity
public class User extends Model {

    @Email
    @Required
    public String email;

    @Required
    public String password;

    public String fullname;
    public boolean isAdmin;
…

現(xiàn)在如果你來(lái)到User模型的編輯或創(chuàng)建表單,你將看到驗(yàn)證規(guī)則已經(jīng)魔法般添加進(jìn)去了。

接下來(lái)是Post類:

package models;

import java.util.*;
import javax.persistence.*;

import play.db.jpa.*;
import play.data.validation.*;

@Entity
public class Post extends Model {

    @Required
    public String title;

    @Required
    public Date postedAt;

    @Lob
    @Required
    @MaxSize(10000)
    public String content;

    @Required
    @ManyToOne
    public User author;

    @OneToMany(mappedBy="post", cascade=CascadeType.ALL)
    public List comments;

    @ManyToMany(cascade=CascadeType.PERSIST)
    public Set tags;
…

然后檢查結(jié)果:

這里你會(huì)看到一個(gè)有趣的副作用:@MaxSize驗(yàn)證規(guī)則改變了Play顯示Post表單的方式?,F(xiàn)在它給內(nèi)容域準(zhǔn)備的是textarea。

最后是給CommentTag類添加驗(yàn)證規(guī)則。

package models;

import java.util.*;
import javax.persistence.*;

import play.db.jpa.*;
import play.data.validation.*;

@Entity
public class Tag extends Model implements Comparable {

    @Required
    public String name;
…
package models;

import java.util.*;
import javax.persistence.*;

import play.db.jpa.*;
import play.data.validation.*;

@Entity
public class Comment extends Model {

    @Required
    public String author;

    @Required
    public Date postedAt;

    @Lob
    @Required
    @MaxSize(10000)
    public String content;

    @ManyToOne
    @Required
    public Post post; 
…

如你所見,表單標(biāo)簽有點(diǎn)奇怪。Play使用Java成員變量作為表單標(biāo)簽。要想自定義它,我們僅需在/yabe/conf/messages中提供一組標(biāo)簽名。

  

事實(shí)上,你可以用一個(gè)多帶帶的messages文件對(duì)應(yīng)應(yīng)用支持的每種語(yǔ)言。比如,你可以把中文信息放入/yabe/conf/messages.zh。你將會(huì)在最后一章讀到如何進(jìn)行本地化。

添加這些標(biāo)簽到messages文件:

title=Title
content=Content
postedAt=Posted at
author=Author
post=Related post
tags=Tags set
name=Common name
email=Email
password=Password
fullname=Full name
isAdmin=User is admin

然后刷新表單,你將看到新的表單標(biāo)簽:

自定義Comments列表

你可以隨心所欲地自定義CRUD模塊。舉個(gè)例子,你不大可能覺得評(píng)論列表長(zhǎng)得符合你的期望。我們還需要添加更多列,特別是“相關(guān)文章”列來(lái)幫助我們過(guò)濾評(píng)論。

事實(shí)上,由于你的應(yīng)用才是老大,你可以覆蓋掉CRUD模塊提供的任意action模板。舉個(gè)例子,如果我們想自定義評(píng)論列表,我們僅需提供/yabe/app/views/Comments/list.html模板。

在CRUD模塊啟動(dòng)后,你就能使用更多的play命令。crud:ov命令幫助你覆蓋掉任意模板。在命令行里。輸入:

$ play crud:ov --template Comments/list

現(xiàn)在你有一個(gè)新的模板/yabe/app/views/Comments/list.html

#{extends "CRUD/layout.html" /}

&{"crud.list.title", type.name}

#{crud.search /}
#{crud.table /}
#{crud.pagination /}

&{"crud.add", type.modelName}

首先看看&{"crud.list.title", type.name},這里輸出了鍵名為crud.list.title的本地化信息,使用type.name作為信息參數(shù)。CRUD模塊的conf/messages包括條目crud.list.title=&{%s},其中的參數(shù)作為另一個(gè)參數(shù)查找時(shí)的鍵,比如這里的&{"Comments"},因?yàn)?b>type是一個(gè)models.Comments對(duì)應(yīng)的CRUD.ObjectType。既然我們沒有定義對(duì)應(yīng)的信息文件條目,默認(rèn)會(huì)輸出信息鍵 - Comments。在本教程的最后一章,你會(huì)學(xué)到關(guān)于本地化信息的更多東西。

#{crud.table /}是生成表格的標(biāo)簽。我們可以使用fields參數(shù)添加更多列。試一下這個(gè):

#{crud.table fields:["content", "post", "author"] /}

現(xiàn)在我們有三列信息了:

有個(gè)問題,content域可能容不下有些過(guò)長(zhǎng)的評(píng)論。我們需要指定#{crud.table /}能夠在需要的時(shí)候截短它。

使用#{crud.custom /}標(biāo)簽,我們可以自定義每個(gè)域的展示方式:

#{crud.table fields:["content", "post", "author"]}
 #{crud.custom "content"}
  
   ${object.content.length() > 50 ? object.content[0..50] + "…" : object.content}
  
 #{/crud.custom}
#{/crud.table}
  

是的,這里撒了些Groovy的語(yǔ)法糖。

自定義Posts表單

我們也可以自定義生成的表單。舉個(gè)例子,原本我們?cè)赑ost表單中輸入標(biāo)簽并不容易。我們需要改善體驗(yàn)。讓我們來(lái)重載掉Posts/show模板:

$ play crud:ov --template Posts/show

現(xiàn)在你有了/yabe/app/views/Posts/show.html

#{extends "CRUD/layout.html" /}

&{"crud.show.title", type.modelName}

#{form action:@save(object.id), enctype:"multipart/form-data"} #{crud.form /}

#{/form}
#{form @delete(object.id)}

#{/form}

你可以通過(guò)給#{crud.form /}標(biāo)簽添加一個(gè)crud.custom標(biāo)簽來(lái)自定義tags域:

#{crud.form}
    #{crud.custom "tags"}
        
            
        
#{list items:models.Tag.findAll(), as:"tag"} ${tag} #{/list}
#{/crud.custom} #{/crud.form}

通過(guò)使用Javascript,我們實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的標(biāo)簽選擇器:

要想自定義標(biāo)簽列表的外觀,以下面的內(nèi)容創(chuàng)建public/stylesheets/tags.css

.tags-list .tag {
     cursor: pointer;
     padding: 1px 4px;
}
.crudField .tags-list .selected {
     background: #222;
     color: #fff;
}

然后,在views/CRUD/layout.html,改變#{set "moreStyles"}塊成這樣:

#{set "moreStyles"}
    
    
#{/set}

管理面板的工作暫告一段落。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/64098.html

相關(guān)文章

  • [翻譯]Play框架1.2.7版本教程(8) - 添加驗(yàn)證

    摘要:添加驗(yàn)證既然我們有一個(gè)管理面板,自然需要進(jìn)行驗(yàn)證。自定義驗(yàn)證過(guò)程你可以用應(yīng)用提供的實(shí)例來(lái)自定義驗(yàn)證過(guò)程。通過(guò)繼承自該類,我們可以指定驗(yàn)證用戶的方式。這個(gè)將給每個(gè)作者發(fā)布自己的文章的權(quán)限。現(xiàn)在在添加到控制器的鏈接接下來(lái)是創(chuàng)建模板。 添加驗(yàn)證 既然我們有一個(gè)管理面板,自然需要進(jìn)行驗(yàn)證。幸運(yùn)的是,Play已經(jīng)提供了一個(gè)叫做Secure的模塊來(lái)幫助我們。 啟動(dòng)Secure模塊 在yabe/co...

    My_Oh_My 評(píng)論0 收藏0
  • [翻譯]Play框架1.2.7版本教程(12) - 國(guó)際化和本地化

    摘要:國(guó)際化和本地化完成了博客引擎后,我們來(lái)考慮額外的一件事應(yīng)用的國(guó)際化和語(yǔ)言的本地化。國(guó)際化和本地化我們將分兩步討論,先是國(guó)際化,再是本地化。實(shí)際上,兩者是同步進(jìn)行的你在國(guó)際化的同時(shí),往往也是在本地化。 國(guó)際化和本地化 完成了博客引擎后,我們來(lái)考慮額外的一件事:Web應(yīng)用的國(guó)際化和語(yǔ)言的本地化。雖然我們可以一開始就做這件事,但是最好還是先完成該應(yīng)用的單一語(yǔ)言版本,然后再添加其他語(yǔ)言的支持...

    hoohack 評(píng)論0 收藏0
  • [翻譯]Play框架1.2.7版本教程(9) - 自定義編輯區(qū)域

    摘要:自定義編輯區(qū)域在前一章,我們給創(chuàng)建了一個(gè)關(guān)于面板,并準(zhǔn)備了我的文章的部分。從文章列表開始我們僅需要查詢用戶相關(guān)的文章并顯示出來(lái)。如果發(fā)生錯(cuò)誤,它會(huì)刷新表單,顯示錯(cuò)誤信息。它表示使用的默認(rèn)模板。這意味著,如果提交了參數(shù),將選擇這條路由。 自定義編輯區(qū)域 在前一章,我們給yabe創(chuàng)建了一個(gè)關(guān)于面板,并準(zhǔn)備了我的文章的部分。每個(gè)作者可以在這個(gè)部分看到他們發(fā)布過(guò)的文章,以及進(jìn)行編輯或者創(chuàng)建新...

    tianren124 評(píng)論0 收藏0
  • [翻譯]Play框架1.2.7版本教程(1)

    摘要:確保你的文本編輯器已經(jīng)做了相應(yīng)的配置。第一個(gè),會(huì)自動(dòng)監(jiān)測(cè)源代碼的改變并在運(yùn)行時(shí)自動(dòng)重載。檢查下面的一行是否出現(xiàn)在應(yīng)用日志中使用版本控制系統(tǒng)來(lái)追蹤變化當(dāng)你開發(fā)一個(gè)項(xiàng)目時(shí),最好使用版本控制系統(tǒng)來(lái)存儲(chǔ)你的源代碼。 Play是一個(gè)Java Web敏捷開發(fā)的框架http://www.playframework.com/documentation/1.2.7/home 之所以要翻譯這個(gè)教程,是因...

    solocoder 評(píng)論0 收藏0
  • [翻譯]Play框架1.2.7版本教程(10) - 完成應(yīng)用測(cè)試

    摘要:完成應(yīng)用測(cè)試我們已經(jīng)完成了我們想要?jiǎng)?chuàng)建的博客引擎。當(dāng)然我們已經(jīng)完成了測(cè)試所有模型層的功能。評(píng)估代碼覆蓋率當(dāng)然我們還沒有完成應(yīng)用所需的所有測(cè)試用例。如你所見,我們遠(yuǎn)遠(yuǎn)沒有完成對(duì)應(yīng)用的全面測(cè)試。 完成應(yīng)用測(cè)試 我們已經(jīng)完成了我們想要?jiǎng)?chuàng)建的博客引擎。不過(guò)這個(gè)項(xiàng)目尚未完全結(jié)束。為了保證代碼的質(zhì)量,我們需要添加更多的測(cè)試。 當(dāng)然我們已經(jīng)完成了測(cè)試所有模型層的功能。所以博客引擎的核心功能已經(jīng)被...

    _Dreams 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<