いろんなJava Webフレームワークで同じ画面を作ってみる(Mojarra(JSF2)編)
いろんなJava Webフレームワークで同じ画面を作ってみる(Mojarra(JSF2)編)です。
お題は、こちら。
Mojarraは、JSF2の実装です。
テンプレートは、xhtmlで作れるようになっているっぽいです。
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" > <display-name>JavaServer Faces</display-name> <description>JavaServer Faces</description> <context-param> <param-name>javax.faces.PROJECT_STAGE</param-name> <param-value>Development</param-value> </context-param> <servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>*.xhtml</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>home.xhtml</welcome-file> </welcome-file-list> </web-app>
Add.java
package webapp; import javax.faces.bean.ManagedBean; import javax.validation.constraints.NotNull; @ManagedBean public class Add { @NotNull private Integer arg1; @NotNull private Integer arg2; private Integer result; public String calculate() { result = arg1 + arg2; return "result.xhtml"; } public Integer getArg1() { return arg1; } public void setArg1(Integer arg1) { this.arg1 = arg1; } public Integer getArg2() { return arg2; } public void setArg2(Integer arg2) { this.arg2 = arg2; } public Integer getResult() { return result; } public void setResult(Integer result) { this.result = result; } }
input.xhtml
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html"> <head> <title>input</title> </head> <body> <h:messages style="color: red;"/> <form jsfc="h:form"> arg1: <input id="arg1" type="text" value="#{add.arg1}" label="arg1" jsfc="h:inputText" /> <h:message for="arg1" style="color: red;"/><br/> arg2: <input id="arg2" type="text" value="#{add.arg2}" label="arg2" jsfc="h:inputText" /> <h:message for="arg2" style="color: red;"/><br/> <input type="submit" value="submit" action="#{add.calculate}" jsfc="h:commandButton" /> </form> </body> </html>
jsfc属性は、Mayaaのm:injectと同じ感じでしょうか。
result.xhtml
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html"> <head> <title>result</title> </head> <body> result: #{add.result} </body> </html>
(追記)コメントで御指摘頂き、テンプレートに関して修正しました。#{add.result}だけでHTMLエスケープされるんですね。エスケープしたくないときだけh:outputTextを指定してescape="false"すれば良いんですね。
以上