response.xhtml
在编辑器中打开 response.xhtml 页。双击 "Projects"(项目)窗口中的 response.xhtml 节点,或者按 Alt-Shift-O 组合键以使用 "Go to File"(转至文件)对话框。
注释掉 HTML 窗体元素。突出显示 HTML
起始标记和结束标记及其之间的代码,然后按 Ctrl-/ 组合键(在 Mac 上为 ⌘-/ 组合键)。*注:*要突出显示该表单元素,可以单击该元素,然后用鼠标在编辑器中拖动;也可以使用键盘,按住 Shift 键并按方向键。
取消 JSF HTML 窗体组件的注释。突出显示
起始标记和结束标记及其之间的代码,然后按 Ctrl-/ 组合键(在 Mac 上为 ⌘-/ 组合键)。此时,
标记之间的代码如下所示:[ response here ]
在取消 JSF HTML 窗体组件的注释后,编辑器将指示
和 标签未进行声明。要声明这些组件,请使用 IDE 的代码完成将标记库名称空间添加到页面的 标记中。
使用编辑器的代码完成支持将所需的 JSF 名称空间添加到文件中。当通过代码完成选择一个 JSF 或 Facelets 标记时,会自动将所需的名称空间添加到文档的根元素中。有关详细信息,请参见 NetBeans IDE 中的 JSF 2.x 支持。
将光标置于任何未声明的标记上,然后按 Ctrl-空格组合键。将显示代码完成建议和文档支持。
Figure 20. 按 Ctrl-空格键调用代码完成建议和 "documentation"(文档)弹出式窗口
按 Enter 键。(如果有多个选项,请确保按 Enter 键之前选择了在编辑器中显示的标记。)JSF HTML 标记库名称空间将添加到 标记中(如以下*粗体*所示),并且错误指示符将消失。
*xmlns:h="http://xmlns.jcp.org/jsf/html"*>
为用户单击窗体按钮时调用的请求指定目标。您希望设置一个按钮以便当用户单击该按钮时,会返回到索引页。要完成此功能,请使用 commandButton 的 action 属性。键入以*粗体*显示的代码。
注:*通过键入 action="index",将可依赖 JSF 的隐式导航功能。当用户单击窗体按钮时,JSF 运行时会搜索一个名为 index 的文件。JSF 运行时将假定文件扩展名与请求源自的文件 (response.xhtml*) 所使用的扩展名相同,并在与源文件相同的目录(即 Web 根目录)中查找 index.xhtml 文件。
将静态的 "[ response here ]" 文本替换为 UserNumberBean 的 response 属性值。要执行此操作,请使用 JSF 表达式语言。输入以下内容(粗体)。
**
运行项目(单击 "Run Project"(运行项目)() 按钮,或者按 F6;在 Mac 上按 fn-F6)。当浏览器中显示欢迎页面时,输入一个数字,然后单击 submit。将看到响应页显示类似于以下的内容(如果您没有猜对数字)。
Figure 21. 在浏览器中查看项目的当前状态
响应页的当前状态中有两处错误:
html
标记显示在了响应消息中。
"Back" 按钮没有显示在正确的位置。(请与原始版本作比较。)
以下两个步骤分别更正了这两个问题。
将 标记的 escape 属性设置为 false。将光标置于 outputText 和 value 之间,插入一个空格,然后按 Ctrl-空格键调用代码完成。向下滚动以选择 escape 属性并检查文档。
Figure 22. 按 Ctrl-空格键查看可能的属性值和文档
如文档所示,默认情况下,escape 值被设为 true。这意味着任何被正常解析为 html 的字符都包含在此字符串中,如上所示。将该值设置为 false,将使任何可解析为 html 的字符都像这样来呈现。
按 Enter 键,然后键入 false 作为值。
将
标记的 prependId 属性设置为 false。将光标置于 中 “m” 的后面并插入一个空格,然后按 Ctrl-空格键调用代码完成。向下滚动以选择 prependId 属性并检查文档。然后按 Enter 键,并键入 false 作为值。JSF 应用内部 id 来跟踪 UI 组件。在当前的示例中,如果检查所呈现页面的源代码,将看到如下内容:
窗体元素的 id 为 j_idt5,并且此 id 被置于包含在窗体中的 "Back" 按钮的 ID 前面(如以上*粗体*显示)。因为 "Back" 按钮依赖于 #backButton 样式规则(在 stylesheet.css 中定义),所以在前置 JSF id 时,将禁用该规则。可以通过将 prependId 设置为 false 来避免这种情况。
再次运行项目(单击 "Run Project"(运行项目)() 按钮,或者按 F6;在 Mac 上按 fn-F6)。在欢迎页面输入一个数字,然后单击 "Submit"。现在响应页显示了不带
标记的响应消息,并且 "Back" 按钮放在了正确的位置。
Figure 23. 在浏览器中查看项目的当前状态
单击 "Back" 按钮。因为 UserNumberBean 的 userNumber 属性的当前值绑定到了 JSF inputText 组件,所以您之前输入的数字现在显示在文本字段中。
在 IDE 的 "Output"(输出)窗口中检查服务器日志(Ctrl-4 组合键;在 Mac 上为 ⌘-4 组合键),以确定正确的猜测数字是什么。
如果由于某种原因无法看到服务器日志,可以通过切换到 "Services"(服务)窗口(Ctrl-5 组合键;在 Mac 上为 ⌘-5 组合键)并展开 "Servers"(服务器)节点来打开日志。然后右键单击项目部署所在的 GlassFish Server,并选择 "View Server Log"(查看服务器日志)。如果在服务器日志中看不到该数字,请尝试通过右键单击项目节点并选择 "Clean and Build"(清理并构建)来重新构建应用程序。
键入正确的数字,然后单击 "Submit"。应用程序将您的输入与当前保存的数字进行比较,并显示相应的消息。
Figure 24. 在输入匹配号时显示正确响应
再次单击 "Back" 按钮。请注意,以前输入的数字在文本字段中不再显示。回想一下,当猜对了数字后,UserNumberBean 的 getResponse() 方法就会使当前的用户会话失效。