【问题标题】:Unable to bind the JSF Managed Bean with the rendered view无法将 JSF 托管 Bean 与呈现的视图绑定
【发布时间】:2019-05-31 21:05:51
【问题描述】:

我正在使用 JSF 开发一个 Java Web 应用程序。我有一个会话范围的托管 bean。此 bean 在应用程序中的一个 jsp 中使用。呈现页面时似乎没有实例化bean。但是,当单击“commandButton”时,我能够看到为托管 bean 调用的构造函数。

属性绑定是使用 'h:inputText' 标记中的 value 属性完成的。 'h:commandButton' 的 action 属性绑定到 Managed Bean 中的方法之一。

Bean 类

public class EventController implements Serializable{
private String eventName;
private String eventVenue;

//Getters, Setter & No Arg Constructor


public String proceed(){
   //Implementation for proceed
}

}

faces-config.xml

<managed-bean>
   <managed-bean-name>eventController</managedBean>
   <managed-bean-class>com.eventapp.eventController</managed-bean-class>
   <managed-bean-scope>session</managed-bean-scope>
</managed-bean>

event.jsp

<tr>
  <td>
       <label>event Name:</label>     
  </td>
  <td>
       <h:inputText value="#{eventContoller.eventName}">
  </td>
<tr>

<tr>
  <td>
       <label>event Venue:</label>     
  </td>
  <td>
       <h:inputText value="#{eventContoller.eventVenue}">
  </td>
<tr>

<tr>
  <td>
       <h:commandButton action="#{eventController.proceed}" value="Continue" />
  </td>
<tr>

我希望在文本字段中看到空白值,但我看到的是“#{eventContoller.eventName}”。

【问题讨论】:

  • jsp?在 jsf 2.2 中...确定吗?这在 jsf 中已被弃用,取而代之的是 facelets。标签用于问题所在,这是 jsf 而不是 jsf-2.2 特定的东西,因此在您的问题中添加版本信息并使用基本的 jsf 标签是更好的做法
  • 你实际上没有围绕 jsf 标签属性的引号?并且没有h:form,客户端上的“view-source”显示html而不是jsf标签?而且您知道您可以使用注释而不是 xml 来声明 managedbeans?
  • 这只是我的客户端代码的一部分。我的原始代码中确实有
    。我已经通过在 jsf 标签上加上引号来更正代码,但仍然没有看到预期的内容。是的,我知道用于配置托管 bean 的注释。我观察到的是会话 bean(eventController) 仅在我单击 Continue 按钮时才加载。它应该在页面加载时加载。
  • 请阅读minimal reproducible example....始终创建一个,删除td,tr等...

标签: jsf


【解决方案1】:

您的 bean 在 JSP 中的名称错误:eventContoller。你定义了:eventController。见

 <managed-bean>
    <managed-bean-name>eventController</managedBean>
   <managed-bean-class>com.eventapp.eventController</managed-bean-class>
   <managed-bean-scope>session</managed-bean-scope>
</managed-bean>

【讨论】:

  • “错误名称”是指标记“”中的值吗?如果您的意思是“”,那我就错了。添加问题是一个错字。检查代码,它是 com.eventapp.EventController
  • 我想说您在控制器名称中遗漏了一个字母“r”:您已定义为 eventController(参见“r”)并用作 eventContoller(没有“r”);跨度>
  • 是的,更正了错字。仍然看到相同的结果:文本字段中的“#{eventcontroller.eventName}”。
  • 让我看看错误日志。放在这里
  • 没有抛出错误。每当我更改输入文本的值时,都应该调用已配置 bean 的相应设置器。但我没有看到它被调用。另外,我已经明确定义了 bean 的构造函数,看起来只有当我单击“继续”按钮时才会调用它。如果我没记错的话,应该在页面加载时调用构造函数。
猜你喜欢
  • 1970-01-01
  • 2013-05-08
  • 1970-01-01
  • 2016-07-09
  • 2014-07-06
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
  • 2013-07-28
相关资源
最近更新 更多