「javaftl页面」javapage
今天给各位分享javaftl页面的知识,其中也会对javapage进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、java jdk1.5为什么获取不到ftl页面的值
- 2、ftl页面可以写java代码吗
- 3、ftl是什么格式
- 4、Java项目中ftl和jsp可以同时并存么,属于功能模块的
- 5、FTL怎么调用java静态方法
- 6、使用java生成word文档中的ftl怎么写
java jdk1.5为什么获取不到ftl页面的值
项目采用SpringMVC+MyBatis 框架。 页面显示下拉选项框select中的信息(option),是用字符串类型的参数“1.AA,2.BB,3.CC”维护起来,以后修改参数就可以了,不用动代码。我在后台Controller中,通过分割截取参数,以“key=1,value=AA...”的形式存入dataMap 中,然后在前端ftl页面上利用freemarker变量之一的list来遍历dataMap 并存到下拉选项框中的option中,结果报错:freemarker.core.InvalidReferenceException: Expression dataMap is undefined 。我的ist遍历方法和网上说的一样,代码如下:
[html] view plain copy print?
select name="groupid" id="groupidId" class="select01"
option value =""--请选择--/option
#if dataMap?exists
#list dataMap?keys as key
option value="${key}"${dataMap.get(key)}/option
/#list
/#if
/select
上网搜了很久,还是没能解决,后来才发现关键问题所在。 我的原Controller层代码也贴出来:
[java] view plain copy print?
@Controller
@RequestMapping("/hrm/outsync/hrmOutsyncLogAct.do")
public class HrmOutsyncLogAct extends BaseAct {
@Autowired
private HrmOutsyncLogMng hrmOutsyncLogMng;
@Autowired
private DictSysParamMng dictSysParamMng;
@RequestMapping(params ="method=findByPage")
public String span style="color:#FF0000;"findByPage/span(HttpServletRequest request, ModelMap model,EHrmOutsyncLog eHrmOutsyncLog) throws Exception {
if (!this.rightAuth(request, "SysAdmin")) {
return "/msg/noright";
}
return "/hrm/hrmOutsyncLog/hrmOutsyncLogList";
}
@RequestMapping(params ="method=getAjaxData")
@ResponseBody
public String span style="color:#FF0000;"getAjaxData/span(HttpServletRequest request, ModelMap model,EHrmOutsyncLog eHrmOutsyncLog) throws Exception {
if (!this.rightAuth(request, "SysAdmin")) {
return this.beanToJson(new PagerVO());
}
initPageCom(request);
eHrmOutsyncLog.decode();
PagerVO pv = hrmOutsyncLogMng.findByPage(eHrmOutsyncLog);
span style="color:#FF0000;"model.addAttribute("dataMap",this.getGroupidName());/span
@SuppressWarnings("unchecked")
ListEHrmOutsyncLog li=(ListEHrmOutsyncLog) pv.getDatas();
if(!Util.isBlank(li)) {
for (EHrmOutsyncLog eHrmOutsyncLog2 : li) {
eHrmOutsyncLog2.setGroupidName(this.getGroupidName().get(eHrmOutsyncLog2.getGroupid().toString()));
}
}
v.setDatas(li);
return this.beanToJson(pv);
}
public MapObject,String getGroupidName() throws Exception {
String str = dictSysParamMng.getValueByCode("groupidName");
String[] strs = str.split(",");
MapObject, String dataMap = new HashMapObject, String();
for(String s : strs){
String[] strs1 = s.split(":");
dataMap.put(strs1[0], strs1[1]);
}
return dataMap;
}
}
描述下业务:我点击页面对应菜单后,首先会调用findByPage()方法,然后进行权限判定,(有权限)转到hrmOutsyncLogList.ftl页面,此时页面会向后台发出getAjaxData()方法,这时候就会通过service,dao,向数据库查询数据,最后获得的数据会显示在页面对应的位置。页面中有查询按钮,其中有下拉选项框select,里面的数据如前所说所获得。
疑问:通过在后端遍历证明,dataMap中有数据.我也将dataMap放到Modelp 中了,前端的遍历也是没错的,但为什么前端页面没能获取dataMap呢?
原因:症结就是这两个方法findByPage(),getAjaxData()。点击菜单后下一步,select中option的值,也就是页面中dataMap就应该接收到值,而此时并没有向后台发送请求,也就是说应该先出来option中的值,再在页面上显示从数据库中查询出来的数据。从代码
[java] view plain copy print?
span style="color:#FF0000;"model.addAttribute("dataMap",this.getGroupidName());/span
的位置看得出来,这句放错地方了,应该是
[java] view plain copy print?
@RequestMapping(params ="method=findByPage")
public String findByPage(HttpServletRequest request, ModelMap model,EHrmOutsyncLog eHrmOutsyncLog) throws Exception {
if (!this.rightAuth(request, "SysAdmin")) {
return "/msg/noright";
}
span style="color:#FF0000;"model.addAttribute("dataMap",this.getGroupidName());/span
return "/hrm/hrmOutsyncLog/hrmOutsyncLogList";
}
这样就成功一大半了。为啥不是没问题了呢?我发现项目运行后,dataMap是有值了,但是dataMap.get(key)却取不到值,我的key是String类型的,按理说上面freemarker的遍历map方法没问题,不知道是人品问题不。后来换成了dataMap[key],这样就能成功显示option中的值了.
ftl页面可以写java代码吗
语法不一样,有专门的ftl语言,调用好像是 ${ MyClass.nameValue }这种形式的。
ftl是什么格式
ftl(FreeMarker Template Language)是Freemarker模板的文件后缀名。
Freemarker其实是一种比较简单的网页展示技术,说白了就是网页模板和数据模型的结合体。这种结合模式的好处就是,分离了网页界面设计人员和编程人员的工作,让他们各司其职。
简单的说,FreeMarker就是一种用Java编写的模板引擎,该模板引擎可适用于任何场景,它根据模板输出多种规格的文本。从更本质的方面来说,它是一个Java package,面向Java程序员class library。它本身并不是针对最终用户的应用,而是允许程序员将其嵌入到他们的产品中。
扩展资料:
FreeMarker被设计用来生成HTML Web页面,特别是基于MVC(Model View Controller)模式的应用程序。
使用 MVC 模式作为动态的WEB页面的想法,是为了分隔页面设计者 (HTML 设计者) 和程序员。
设计者可以不通过程序员的改变或修改代码来改变网页的样子,因为应用逻辑(Java程序)和页面设计(FreeMa-rker 模版)是分开的。模板不会被复杂繁琐的程序框架所破坏。即使当一个项目的程序员和HIMTL页面的制作者是同一个人时,这种分隔也是很有用,因为这样有助于保持应用的清晰并易于维护。
参考资料:
百度百科-FTL文件格式
Java项目中ftl和jsp可以同时并存么,属于功能模块的
ftl不可以和jsp共存的,二者具有转化关系。
freemarker(FTL)常见语法(JSP中的代码转化为ftl代码) 举例如下:
1、引入公共页面#include "params.ftl"
2、判断是否为空:#if (resultContext.pagination.resultList)?? resultContext.pagination.resultList?size gt 0
3、集合遍历:
#list list as a
${a_index+1}
/#list
4、访问Java类中的静态方法
#if st == stack.findValue("@com.test.bo.SkuTag@NEW")#elseif st == stack.findValue("@com.test.bo.SkuTag@SPECIAL")
5、访问Request对象
${Request.effectType.infoName!'' } 其他域对象比如:Session对象 貌似还是是${Session.*****}
6、使用其他标签如struts2标签:
引入tld:#assign ts=JspTaglibs["/skw-tags"] / 使用: @ts.productPrice loginUrl="${ctxtPath}/login_jsp.html"/
FTL怎么调用java静态方法
静态方法是使用公共内存空间的,就是说所有对象都可以直接引用,不需要创建对象再使用该方法。
例如,我创建一个类,里面有一个静态方法:
class Test{
public static int z(int xx,int yy){
return xx+yy;
}
public int zz(int xx,int yy){
return xx+yy;
}
}
然后在含有main方法的类中使用这个类时,对与以上非静态和静态方法的引用方式是不同的,如下:
import Test;
public class mainClass{
int sum;
public static void main(String args[]){
sum=Test.z(1,2); //直接用 类.方法或者属性就可以使用该方法或属性。
System.out.println(sum);
Test t=new Test();
sum=t.zz(1,2); //因为zz不是静态方法,所以只能只能用Test类创建一个t对象,然后调用该对象的方法。
System.out.println(sum);
}
}
ls他们说的也是有道理的,静态方法只能被静态方法调用。
使用java生成word文档中的ftl怎么写
Java语言提供了一种强大的注释形式:文档注释。可以将源代码里的文档注释提取成一份系统的API文档。我们在开发中定义类、方法时可以先添加文档注释,然后使用javadoc工具来生成自己的API文档。
文档注释以斜线后紧跟两个星号(/**)开始,以星号后紧跟一个斜线(*/)作为结尾,中间部分全部都是文档注释,会被提取到API文档中。
自行搜索一下javadoc即可,示例如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/**
* 类描述
*
* @author 作者
* @version 版本
*/
public class DemoClass {
/**
* 内部属性:name
*/
private String name;
/**
* Setter方法
* @return name
*/
public String getName() {
return name;
}
/**
* Getter方法
* @param name
*/
public void setName(String name) {
this.name = name;
}
}
javaftl页面的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于javapage、javaftl页面的信息别忘了在本站进行查找喔。