【问题标题】:Form inside <p:Dialog> doesnt set values to Entities<p:Dialog> 内的表单不会将值设置为实体
【发布时间】:2013-11-21 17:53:00
【问题描述】:

我在 Weblogic 10.3.0 中有一个 Java Web 应用程序 (WAR):

  • JSF 2.0
  • Primefaces 3.5
  • jboss-el-2.0.0.GA.jar(如果我用el-api-2.2.jar和el-impl-2.2.jar是一样的)
  • validation-api-1.1.0.Final.jar
  • Eclipselink (JPA 2.1)
  • hibernate-validator-4.2.0.Final.jar
  • JSTL 1.1
  • Java EE 5

我在&lt;p:dialog/&gt; 中有一个&lt;h:form/&gt; 来编辑/创建实体并将它们保存到数据库中。

我的问题是&lt;p:commandButton/&gt; 在将值直接设置为实体属性时不会调用actionListener。例如,这是我的代码:

<h:form>
    <p:outputLabel value="Name:" for="name" />
    <p:inputText id="name" value="#{Servidores.selectedEntity.name}" title="Name" />
    <p:outputLabel value="IP:" for="ip" />
    <p:inputText id="ip" value="#{Servidores.selectedEntity.ip}" title="IP" />

    <p:commandButton value="Submit" oncomplete="appEditingDialog.hide();" actionListener="#{Servers.processEntityAndRefresh()}"/>
</h:form>

但是,如果我将值设置为在 bean 中声明的简单字符串变量,而不是在实体中它可以工作。像这样:

<p:inputText id="name" value="#{Servidores.stringInMyBean}" title="Name" />

我认为这是一个验证问题,但如果我将此表单放在对话框之外,它会起作用。

这可能是什么问题和解决方案?我见过有人将属性直接放在@ManagedBean 中,但是,哇,我不能混合模型和控制器。

谢谢。

【问题讨论】:

  • 确定您在服务器日志中没有 NPE?你真的查看了服务器日志吗?
  • 我没有看到消息组件,可能是出了点问题而您没有看到?您可以添加&lt;h:messages /&gt;&lt;p:messages /&gt; 来检查。
  • @BalusC 我发布了解决方案以及我遇到的所有问题!无论如何,谢谢。

标签: validation jsf primefaces


【解决方案1】:

这就是我解决这个问题和其他问题的方法:

在我的 Template.xhtml 中,我确保声明是这样的:

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui"
      xmlns:f="http://java.sun.com/jsf/core">

因为我用“xmlns.com”代替了“java.sun.com”(类似的东西,我不知道为什么)。我的 EL 问题解决了,但出现了一个新问题:一切都很大:字体、组件等。

我不得不用 CSS 修复所有东西,但我不喜欢那样,这是不可接受的!另外,对话框显示在页面底部。所以在尝试了一些事情之后,我修复了它使用HTML 而不是仅仅&lt;ui:composition/&gt; 来制作模板客户端。所以我可以删除我对 CSS 文件所做的所有“强制更改”(我真的不知道为什么只有 &lt;ui:composition/&gt; 会出现这种行为)。

但是等等! ,在页面的一部分问题又回来了!从数据表调用 ManagedBean 中的方法/属性再次无法正常工作,这是因为 Primefaces &lt;p:Dashboard/&gt; 标记为“已禁用”,我将其设置为 true 以不允许用户移动面板。我的数据表位于仪表板内的面板内,将其设置为 false 后一切正常(我猜这是一个 primefaces 错误)。

然后,我只是从 Primefaces 3.5 迁移到 4.0 并使用 JSTL 1.2 而不是 1.1

但是,是的,主要问题是因为在声明 xmlns、xmlns:h、xmlns:f 等时链接错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-08
    • 1970-01-01
    • 1970-01-01
    • 2011-10-09
    • 2012-01-19
    • 1970-01-01
    • 2022-10-02
    • 1970-01-01
    相关资源
    最近更新 更多