</h:inputText> inputText标签根据相应的值设置了id和value的属性。在JSF中是通过setAttribute(String name, Object value)设置每一个属性值的。但我们需要注意的是JSF标签可以指定相应的默认值。这有些类似java中的系统属性,如果你给了一个属性名子,那系统将返回这个属性的值,如果指定它的默认值,并且这个属性不存在的话,将返回这个默认值。 接下来让我们来看看上面程序的最重要的部分,也就是UIInput组件的事件处理。 <f:valuechangeListener type="tempconv.page.TCChangedListener"/> 在JSF中事件处理是由valuechangeListener标签完成的。这个标签所表示的事件在文本框的值发生变化时引发事件。但有意思的是这个事件并不马上提交,而是要等到用户点击"提交"按钮后这个事件连同相应的数据才提交给后端。因此,这个事件请求也叫做预提交。最后,让我们看看UICommand的代码实现。 <div> <h:commandButton value="转换" action="#{tc.convert}"> </h:commandButton> </div> 上面的代码将convert()方法和UICommand连接了起来,也就是说,点击"提交"按钮后,将执行convert()方法。在遇到view标签后,JSF程序结果,JSFAPI最后调用doEnd方法来结束JSF程序。JSF引擎在解析这段程序后,将相应的JSF标签转换为HTML组件。 最后,让我们来看看JSP是如何响应JSF事件的。下面是一段响应JSF事件的Java代码。 public class TCChangedListener implements ValueChangeListener { public TCChangedListener() { super(); } // 事件处理 public void processValueChange(ValueChangeEvent event) throws AbortProcessingException { UIComponent comp = event.getComponent(); Object value = event.getNewValue(); if (null != value) { float curVal = ((Number) value).floatValue(); Map values = comp.getAttributes(); if (curVal < 0) { values.put("styleClass", "red"); } else { values.put("styleClass", "black"); } } } 要想响应JSF事件,必须要实现JSF库中的ValueChangeListener接口。上面的程序要注意的是最后根据输入的值来设置相应的颜色。这些值并不依赖JSP。当然,你也可以将它们设置成null,而由JSP 标签来设置它们的颜色。 |