最近要開始做項目了,項目中可能會用到Struts2和Freemarker集成,所以做了個實例給大家分享一下。
前期的配置web.xml,導入jar包就不給大家介紹了,這些內容做過struts2的朋友的非常熟悉,如果有不會的大家可以找一下幫助文檔或者上互聯網上搜索一下解決方法。
看過struts2結構圖的朋友們都應該知道struts2的展現層不再是像struts1那樣單純的jsp了,它能夠集成很多展現層技術,例如今天說的freemarker等等。

既然上面都說到了freemarker僅僅是一個展現層技術,那么我們自然會想到,freemarker應該和struts2中配置的action標簽中的result有關系,其實就是這樣的,我們知道struts2的result標簽就是匹配跳轉路徑控制展示層的作用,所以我們利用struts2和freemarker的最近本操作就是配置result標簽,把原先的result標簽的type變成freemarker,跳轉的文件變成freemarker的模板文件即可。配置如下:
- <struts>
-
- <package name="struts"extends="struts-default">
-
- <action name="userLogin"class="com.test.action.LoginAction" method="userLogin">
-
- <result name="success" type="freemarker">
-
- /WEB-INF/templates/user.ftl
-
- </result>
-
- </action>
-
- </package>
-
- </struts>
如果我們要是用struts2的注解方式來配置action的話,那么我們就會這樣配置:
- @Action(value = "showadd", results ={ @Result(name = "success", type = "freemarker", location ="/flt/adduser.ftl") })
總之就是要改result的類型和跳轉文件類型即可。
最后我們說一下我們怎么將模板中的變量變成實際的值,這個也是比較簡單的,我們這個工作要在action中實現,具體就是我們要將模板中的變量定義到action中,并且生成get和set方法,最后在相應的業務方法中將這個變量賦值,這樣struts2就會自動的為我們將值填寫到模板中,形成真實的展現頁面,最后跳轉顯示給用戶。
Freemarker的模板實例:
- <html>
-
- <head>
-
- <meta http-equiv="Content-Type" content="text/html;charset=gb2312">
-
- <title>Insert title here</title>
-
- </head>
-
- <body>
-
- <formmethodformmethod="post" action="${formaction}" name="${formname}">
-
-
-
- <input id="${adduser_username}" name="${adduser_username}" type="${text}" value="" />
-
- <input id="${adduser_password}" name="${adduser_password}" type="${text}" value=""/>
-
- <input id="${adduser_submit}" name="${adduser_submit}" type="${submit}" value="adduser" />
-
- </form>
-
- </body>
-
- </html>
對應的action:
- private Stringformaction;
-
-
-
- private Stringformname;
-
-
-
- private Stringadduser_username;
-
-
-
- private Stringadduser_password;
-
-
-
- private Stringadduser_submit;
-
-
-
- private Stringtext;
-
-
-
- private Stringsubmit;
-
-
-
- public StringgetAdduser_username() {
-
- returnadduser_username;
-
- }
-
-
-
- publicvoidsetAdduser_username(String adduser_username) {
-
- this.adduser_username = adduser_username;
-
- }
-
-
-
- public StringgetAdduser_password() {
-
- returnadduser_password;
-
- }
-
-
-
- publicvoidsetAdduser_password(String adduser_password) {
-
- this.adduser_password = adduser_password;
-
- }
-
-
-
- public StringgetAdduser_submit() {
-
- returnadduser_submit;
-
- }
-
-
-
- publicvoid setAdduser_submit(Stringadduser_submit) {
-
- this.adduser_submit = adduser_submit;
-
- }
-
-
-
- public StringgetText() {
-
- returntext;
-
- }
-
-
-
- publicvoidsetText(String text) {
-
- this.text =text;
-
- }
-
-
-
- public StringgetSubmit() {
-
- returnsubmit;
-
- }
-
-
-
- publicvoidsetSubmit(String submit) {
-
- this.submit =submit;
-
- }
-
-
-
- public StringgetFormaction() {
-
- returnformaction;
-
- }
-
-
-
- publicvoidsetFormaction(String formaction) {
-
- this.formaction =formaction;
-
- }
-
-
-
- public StringgetFormname() {
-
- returnformname;
-
- }
-
-
-
- publicvoidsetFormname(String formname) {
-
- this.formname =formname;
-
- }
-
-
-
-
-
- @Action(value= "showadd", results = { @Result(name ="success", type = "freemarker", location = "/flt/adduser.ftl") })
-
- public Stringshowadd() throws Exception {
-
- /*
-
- * FreeMarkerUtil freeMarkerUtil=newFreeMarkerUtil();
-
- * Map<String,Object> root=newHashMap<String,Object>(); //為數據模型添加值
-
- * root.put("formaction","adduser"); root.put("formname", "adduser");
-
- *
-
- * FileWriter out=new FileWriter(newFile("/adduser.ftl"));
-
- * freeMarkerUtil.printFile("/flt","adduser.ftl",root, out);
-
- */
-
- setFormaction("adduser");
-
- setFormname("adduser");
-
- setAdduser_password("password");
-
- setAdduser_submit("adduser_submit");
-
- setAdduser_username("username");
-
- setText("text");
-
- setSubmit("submit");
-
- return"success";
-
- }
這樣我們運行就能夠看到我們的一個添加頁面,需要填入用戶名和密碼。