关于JSF中UI控件binding的头痛问题,恳请指教

oldbig615 2007-06-20 04:49:10
我照着下面的例子做,系统报错
严重: Servlet.service() for servlet faces threw exception
javax.faces.el.EvaluationException: Exception while invoking expression #{Backing.listen}
.....
Caused by: java.lang.NullPointerException
at jwc.compet.view.bean.BackingBean.listen(BackingBean.java:20)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.myfaces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:129)
... 28 more

恳请指教,问题出在哪里?

JSF中UI控件binding属性的用法

在.Net中,binding是个十分容易理解的东西,但最近学习JSF,总理解不了binding属性的用法,查了一些资料,都是简单的说明,对这个属性没有什么例子。今天星期天,没事来到公司,突然对这个属性领悟了,觉得特别高兴。等我理解后,觉得这个属性是十分简单的,没理解之前,隔层窗户纸,总那么朦朦胧胧的。现在把这个小例子写出来,以做备忘。
index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsf/core" %>
<html>
<head>
<title>
Simple jsp page
</title>
</head>
<body>
<c:view>
<c:loadBundle basename="jsfResource" var="msg"></c:loadBundle>
<h:form>
<h:outputText value="#{msg.username}"></h:outputText> :
<h:inputText value="" binding="#{Backing.txtComponentInput}"></h:inputText>
<br>
<h:commandButton value="#{msg.btnSubmit}" actionListener="#{Backing.listen}"></h:commandButton>
</h:form>
</c:view>
</body>
</html>
index.jsp文件说明,16行就是binding绑定,18行是action事件。其实binding就是把控件的实例以属性的形式存储到bean里面,便于其他函数或方法操作这个控件。在.Net中,每个服务器控件就相当于一个类,服务器控件的属性就是类中的属性。程序编写人员对控件value,color等属性的操作其实就是对类中属性的操作(理解不正确之处,望给予斧正)。这里,JSF的思想和.Net是一致的。把控件的以实例的形式放到bean中,这样就可以用程序随意操作这个控件的各个属性了。

BackingBean.java
import javax.faces.component.UIInput;
import javax.faces.event.ActionEvent;
import javax.faces.context.FacesContext;
/**
* Created by IntelliJ IDEA.
* User: Administrator
* Date: 2006-1-15
* Time: 10:02:59
* To change this template use File | Settings | File Templates.
*/
public class BackingBean {
UIInput txtComponentInput;
public UIInput getTxtComponentInput() {
return txtComponentInput;
}
public void setTxtComponentInput(UIInput txtComponentInput) {
this.txtComponentInput = txtComponentInput;
}
public void listen(ActionEvent e) {
FacesContext context = FacesContext.getCurrentInstance();
txtComponentInput.setValue("@@@@@@");
txtComponentInput.setRendered(true);
System.out.println(e.getComponent().getClientId(context));
}
}

BackingBean.java文件说明:主要是27,28行,其意思是当按钮的action事件触发后,就控件txtComponentInput进行操作,这里,我只是对Value和Rendered两个属性进行了操作,当然可以对其他属性进行随意操纵。这里的txtComponentInput其实就是<h:inputText value="" binding="#{Backing.txtComponentInput}"></h:inputText>,把此控件绑定到bean中,便于用程序对其进行动态控制。
faces-config.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 <!DOCTYPE faces-config PUBLIC "-//Sun Microsystems,
Inc.//DTD JavaServer Faces Config 1.0//EN"
"http://java.sun.com/dtd/web-facesconfig_1_0.dtd">
<faces-config>
<navigation-rule>
<from-view-id>/index.jsp</from-view-id>
<navigation-case>
<from-outcome>login</from-outcome>
<to-view-id>/index.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<managed-bean>
<managed-bean-name>Backing</managed-bean-name>
<managed-bean-class>BackingBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
</faces-config>
faces-config.xml文件大家一看就是知道意思,就不多说了。
下面是运行截图.(当点击Submit按钮时,input被负值@@@@@@)
...全文
412 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
oldbig615 2007-06-22
  • 打赏
  • 举报
回复

oldbig615 2007-06-21
  • 打赏
  • 举报
回复
谢谢楼上的,不过你误解了我的意思。我想学习一下JSF中UI控件binding属性的用法,按你的做法没有使用 binding属性
hornbilltofy 2007-06-21
  • 打赏
  • 举报
回复
<h:inputText value="" binding="#{Backing.txtComponentInput}"></h:inputText>
<br/>
<h:commandButton value="#{msg.btnSubmit}" actionListener="#{Backing.listen}"></h:commandButton>
改成
<h:inputText value="#{Backing.txtComponentInput}"></h:inputText>
<br/>
<h:commandButton value="#{msg.btnSubmit}" action="#Backing.listen}"></h:commandButton>
public void listen(ActionEvent e)改成public void listen()
学习jsf最好忘掉.net,否则你会很麻烦.

oldbig615 2007-06-21
  • 打赏
  • 举报
回复

**PrimeUI 一套JavaScript Widget控件** PrimeUI是一个来自PrimeFaces的项目。 PrimeFaces是一个轻量级的、支持JSF 2.0的开源组件套件,具有100多个丰富的JSF组件,极大地提高了JSF Web应用程序的开发效率。 PrimeFaces是一个用于提高JSF Web应用程序开发效率的开源类库。主要由三个模块组成: UI Components模块:提供拥有Rich Web用户体验的各种JSF组件,PrimeFaces提供的组件能够处理JavaScript Rendering在服务器端的集成问题。其包括HtmlEditor、ImageCropper、Dialog、AutoComplete、 Flash based Chart等。并支持通过Ajax更新页面。 Optimus模块:提供简化JSF开发的解决方案。Optimus提供基于Google Guice IOC容器的注释来代替XML配置。Optimus还支持利用JPA实现数据持久化;将DataTable的内容导出成Excel与PDF。支持安全扩展。 FacesTrace模块:提供跟踪JSF Web应用程序的各种工具:JSF LifeCycle可视化查看器;性能跟踪器;Log4J适配器;FacesMessage监听器;组件树可视化查看器。 PrimeUI是一套JavaScript Widget控件,可用于创建UI。PrimeUI是把原PrimeFaces的组件进行解耦,提取出来的JS控件可以用于PHP、ASP、 Wicket、GWT等等的开发。PrimeUI使用JSON数据,并使用jQuery UI的WidgetFactory API提供Widget控件,作为jQuery插件。其代码开源,采用Apache许可证。 PrimeUI最终发布的控件列表包括: - InputText - InputTextarea - SelectOneMenu - RadioButton - Checkbox - CheckboxMenu - Rating - Spinner - AutoComplete - TabView - AccordionPanel - DataTable - DataList - DataGrid - Paginator - Tree - TreeTable - MindMap - Button - ToggleButtons - Menu - Menubar - TieredMenu - ContextMenu - SlideMenu - Breadcrumb - Growl - Fieldset - Panel - Toolbar - Dialog - OverlayPanel - ProgressBar - Inplace - Tooltip - Carousel - TagCloud - PickList - OrderList

81,090

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧