2.4.2. 探索 numberguess Quickstart
numbergue s quickstart 演示了如何将简单的非持久性应用创建和部署至 JBoss EAP。信息通过 JSF 视图显示,业务逻辑则封装在两个 CDI Bean 中。在 编号快速启动 中,您有十次尝试猜测 1 到 100 之间的数字。在每次尝试后,您都会了解到您的猜测过于高还是太低。
numberguess Quickstart 的代码可以在 QUICKSTART_HOME/numberguess/ 目录中找到,其中 QUICKSTART_HOME 是您下载并解压缩 JBoss EAP 快速入门的目录。numbergue s quickstart 由多个 Bean、配置文件和 Facelet(JSF)视图组成,并打包为一个 WAR 模块。
使用命令行构建和部署此快速启动的详细说明,请参阅 numberguess quick start 目录的 README.html 文件。以下示例使用 Red Hat CodeReady Studio 运行 Quickstart。
先决条件
- Install Red Hat CodeReady Studio.具体步骤,请参阅《Red Hat CodeReady Studio 安装指南 》中的安装程序独立安装 CodeReady Studio。
-
运行
numberguessQuickstart。具体步骤请参阅 在 Red Hat CodeReady Studio 中运行 Quickstarts,并将helloworld替换为说明中的 numbergues。 -
打开 Web 浏览器并访问位于此 URL 的应用,以验证
numbergues quickstart 已成功部署到 JBoss EAP :
检查配置文件
本例的所有配置文件都位于快速启动的 QUICKSTART_HOME/numbergues/src/main/webapp/WEB-INF/ 目录中。
检查 face
-config.xml文件。此快速入门使用
-config.xml文件名的 JSF 2.2 版本。Facelet 的标准化版本是 JSF 2.2 中的默认视图处理程序,因此不需要配置。此文件仅包含 root 元素,只是指示应用中应启用 JSF 的标志文件。<faces-config version="2.2" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"> </faces-config>检查
beans.xml文件。beans.xml文件包含版本号 1.1,并且bean-discovery-mode包含all。此文件是一个标志文件,将 WAR 识别为 Bean 存档,并告知 JBoss EAP 在此应用中查找 Bean 并激活 CDI。<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd" bean-discovery-mode="all"> </beans>
此快速入门不需要 web.xml 文件。
2.4.2.1. 检查 JSF 代码
JSF 将 .xhtml 文件扩展用于源文件,但通过 .jsf 扩展提供渲染的视图。home.xhtml 文件位于 src/main/webapp/ 目录中。
示例:JSF 源代码
19<html xmlns="http://www.w3.org/1999/xhtml"
20 xmlns:ui="http://java.sun.com/jsf/facelets"
21 xmlns:h="http://java.sun.com/jsf/html"
22 xmlns:f="http://java.sun.com/jsf/core">
23
24 <head>
25 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
26 <title>Numberguess</title>
27 </head>
28
29 <body>
30 <div id="content">
31 <h1>Guess a number...</h1>
32 <h:form id="numberGuess">
33
34 <!-- Feedback for the user on their guess -->
35 <div style="color: red">
36 <h:messages id="messages" globalOnly="false" />
37 <h:outputText id="Higher" value="Higher!"
38 rendered="#{game.number gt game.guess and game.guess ne 0}" />
39 <h:outputText id="Lower" value="Lower!"
40 rendered="#{game.number lt game.guess and game.guess ne 0}" />
41 </div>
42
43 <!-- Instructions for the user -->
44 <div>
45 I'm thinking of a number between <span
46 id="numberGuess:smallest">#{game.smallest}</span> and <span
47 id="numberGuess:biggest">#{game.biggest}</span>. You have
48 #{game.remainingGuesses} guesses remaining.
49 </div>
50
51 <!-- Input box for the users guess, plus a button to submit, and reset -->
52 <!-- These are bound using EL to our CDI beans -->
53 <div>
54 Your guess:
55 <h:inputText id="inputGuess" value="#{game.guess}"
56 required="true" size="3"
57 disabled="#{game.number eq game.guess}"
58 validator="#{game.validateNumberRange}" />
59 <h:commandButton id="guessButton" value="Guess"
60 action="#{game.check}"
61 disabled="#{game.number eq game.guess}" />
62 </div>
63 <div>
64 <h:commandButton id="restartButton" value="Reset"
65 action="#{game.reset}" immediate="true" />
66 </div>
67 </h:form>
68
69 </div>
70
71 <br style="clear: both" />
72
73 </body>
74</html>
以下行号与在 Red Hat CodeReady Studio 中查看文件时看到的行号对应。
表 2.2. JSF Details
| 行 | 备注 |
|---|---|
| 36-40 | 这些消息可以发送给用户:"Higher!"和"Lower!"。 |
| 45-48 | 用户猜测,可以猜到的数字范围会较小。这一句子会改变,确保他们知道有效猜测的范围。 |
| 55-58 | 此输入字段绑定至使用值表达式的 bean 属性。 |
| 58 | 验证器绑定用于确保用户不会意外输入他们可能猜到的范围之外的数字。如果验证器不在此处,用户可能会对不限号使用一个猜测。 |
| 59-61 | 必须有办法让用户将其猜测发送到服务器。在这里,我们绑定了 Bean 的操作方法。 |