2009-09-01 57 views
1

我遇到了麻烦,使用JSF只是想运行它,所以如果有什么明显的人可以发现。我有一个托管的bean,这给我带来了麻烦。在我faces-config.xml我:JSF数据绑定

<managed-bean> 
    <description>Info Bean</description> 
    <managed-bean-name>InfoBean</managed-bean-name> 
    <managed-bean-class>bean.InfoBean</managed-bean-class> 
    <managed-bean-scope>request</managed-bean-scope> 
</managed-bean> 

在我的JSF我有以下几点:

<h:outputText value="#{InfoBean.deviceModel}" rendered="true"></h:outputText> 

我有InfoBean一个POJO如下:

public class InfoBean { 

String deviceModel; 
String userEmail; 
String active; 

public InfoBean() { 
    // TODO Auto-generated constructor stub 
} 

public String getDeviceModel() { 
    return deviceModel; 
} 
public void setDeviceModel(String deviceModel) { 
    this.deviceModel = deviceModel; 
} 
public String getUserEmail() { 
    return userEmail; 
} 
public void setUserEmail(String userEmail) { 
    this.userEmail = userEmail; 
} 
public String getActive() { 
    return active; 
} 
public void setActive(String active) { 
    this.active = active; 
} 
} 

有一个无参数的构造函数在POJO中,但由于某种原因,deviceModel值不显示在屏幕上,我无法弄清楚为什么!任何帮助非常感谢。我有一个处理程序,它也在faces-config中作为单独的托管bean,当用户单击按钮时,控件转到处理程序类,该类调用一个服务来填充POJO InfoBean中的字段,所以我可以看到它应该出现但它不!

任何帮助非常感谢。

+0

这不是一个错字? bean.ImeiInfoBean!= InfoBean – McDowell 2009-09-01 22:31:02

+0

对不起,我刚刚删除了一些名称来保存一些机密信息,并忘记了那一点。然而,没有错字。 – msharma 2009-09-02 02:42:13

+0

处理程序类如何获取InfoBean的引用?我会检查它是否是该字段读取的实例。没有看到事件的流动就很难诊断问题。创建一个简单的应用程序,将元素减少到重现问题所需的最少量。 – McDowell 2009-09-02 12:47:47

回答

1

我已经解决了这个问题,解决方案是,因为我有这样一个模型:JSP按钮被单击 - >调用去处理程序调用方法在服务 - >服务填充托管bean InfoBean并返回它来处理

尽管在配置文件中声明了作用范围为会话的托管bean,但实际上并不是会话的一部分。在我的处理程序返回InfoBean后,我补充说:

HttpSession session = (HttpSession)FacesContext.getCurrentInstance().getExternalContext().getSession(false); 
    session.setAttribute("InfoBean", InfoBean); 

这将它放在会话中,立即和值开始出现! :-))

我已经阅读了几篇关于这方面的文章,从未见过这篇文章,所以我想知道它是如何做的。我得到的另一个建议是使InfoBean成为Handler的一个私有实例,并带有getter和setter,这样它将通过处理函数创建,并且也将是olk。虽然我没有尝试过这种方法。感谢所有的帮助。

0

如何填充bean的deviceModel属性?

你确定它不是null吗?最后,您可以检查通过把一个日志中的getter方法:

public String getDeviceModel() { 
    System.out.println("Getter called: " + deviceModel + "."); 
    return deviceModel; 
} 

最终,你可以修改这个bean将其设置为会议的范围。

0

您的文章显示它在请求范围而不是会话范围中定义。如果将其更改为会话,则不需要使用setAttribute()。或者也许我错过了一些东西。

0

尽管将会话范围改为会话,但它不起作用,上面的代码将其添加到HttpSession中对于此操作是必要的,或者我已经找到了。

谢谢。