playframework

石超
2023-12-01

注意:本文所用play版本的为2.2.X


*play框架导包用的是sbt,类似于java的maven,sbt是管理scala jar包的工具,在build.sbt中配置,而如果需要添加一些插件的话则一般在plugin.sbt中添加。build.sbt中添加jar包的方式和maven类似,添加顺序为:组,名称和版本,分别用“”引起来,中间加上%,比如添加mongodb驱动jar包

libraryDependencies ++= Seq(
  javaJdbc,
  javaEbean,
  cache

在括号末尾添加上 "org.mongodb" % "mongo-java-driver" % "3.2.2",注意:cache后面要加逗号。


*超链接跳转<a href='@(Constant.ex_name + "/toOrder/"+driver.get("Ucode"))'>立即预约</a>

图片<img src="@routes.Assets.at("images/fast/close.png")"  οnclick="hidepic();"/>


*play中Cache,session,flash区别,Cache是全局存在,key要求唯一;session和Java里的session差不多,写法更简洁(具体用法参考官网:https://www.playframework.com/documentation/2.2.x/ScalaSessionFlash),

 flash的开销更小,可以用来传递一些提示信息什么的给页面,一次性的,读取了就没了 ,且不能和ok使用只能和redirect使用具体见官网说明;
Cache之类的东西在重复使用过程中可能会出现无法取出值或者取出的过程中出错的问题,解决办法是清理项目,重建项目,再重新运行项目;


*play2生成验证码图片

http://stackoverflow.com/questions/18550107/how-to-use-captcha-in-play-framework-2-1-3

1.Download Kaptcha which is an opensource captcha package.Put it in the lib folder.

2.Implement a captcha method in Application.java.

public static Result captcha(){
    DefaultKaptcha captchaPro=new DefaultKaptcha();
    captchaPro.setConfig(new Config(new Properties()));
    String text=captchaPro.createText();
    Logger.debug("Captcha:"+text);//U can put the text in cache.
    BufferedImage img=captchaPro.createImage(text);
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    try{
        ImageIO.write(img, "jpg", baos);
        baos.flush();
    }catch(IOException e){
        Logger.debug(e.getMessage());
    }
    return ok(baos.toByteArray()).as("image/jpg");
}
3. Add the route to the  routes  file. Access http://[yourhost]:[port]/captcha .

GET     /captcha                    controllers.Application.captcha


*// 获取存放二维码地址 String upload_user_channel = Play.application().configuration().getString("upload_user_channel");


*mongo查询添加正则表达式条件

Pattern pattern = Pattern.compile("^" + s + ".*$", Pattern.CASE_INSENSITIVE);
 DBObject ref = new BasicDBObject(srcType, pattern);

flag的取值范围如下: 
Pattern.CANON_EQ     当且仅当两个字符的"正规分解(canonical decomposition)"都完全相同的情况下,才认定匹配。比如用了这个标志之后,表达式"a\u030A"会匹配"?"。默认情况下,不考虑"规 范相等性(canonical equivalence)"。 
Pattern.CASE_INSENSITIVE  默认情况下,大小写不明感的匹配只适用于US-ASCII字符集。这个标志能让表达式忽略大小写进行匹配。要想对Unicode字符进行大小不明感的匹 配,只要将UNICODE_CASE与这个标志合起来就行了。 
Pattern.COMMENTS 在这种模式下,匹配时会忽略(正则表达式里的)空格字符(译者注:不是指表达式里的"\\s",而是指表达式里的空格,tab,回车之类)。注释从#开始,一直到这行结束。可以通过嵌入式的标志来启用Unix行模式。 
Pattern.DOTALL 在这种模式下,表达式'.'可以匹配任意字符,包括表示一行的结束符。默认情况下,表达式'.'不匹配行的结束符。 
Pattern.MULTILINE  在这种模式下,'^'和'$'分别匹配一行的开始和结束。此外,'^'仍然匹配字符串的开始,'$'也匹配字符串的结束。默认情况下,这两个表达式仅仅匹配字符串的开始和结束。

Pattern.UNICODE_CASE  在这个模式下,如果你还启用了CASE_INSENSITIVE标志,那么它会对Unicode字符进行大小写不明感的匹配。默认情况下,大小写不敏感的匹配只适用于US-ASCII字符集。 
Pattern.UNIX_LINES 在这个模式下,只有'\n'才被认作一行的中止,并且与'.','^',以及'$'进行匹配。



*play框架页面不能使用@else if如果要达到类似else if的效果,只能装换成

@else{

@if(){ 

}

}

除此之外使用else不需要加@


*scala和java一样都存在关键字,取名字最好不要取单个词语的名字,因为很可能取的就是关键字。


*后台获取表单数据

DynamicForm requestData = Form.form().bindFromRequest();
String name = requestData.get("name");
String phone = requestData.get("phone");
String address = requestData.get("address");


*后台封装数据

/*public static List<Map<String, Object>> getNearbyDriverList() {
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();

ObjectNode json = Json.newObject();
json.put("name", "****");
json.put("pic", "http://www.baidu.com/");
json.put("xinji", 3);

list.add(JsonUtils.jsonToMap(json3));

return list;
}*/

 类似资料: