<p:dialog>中的表单不会将值设置为实体</p:dialog>

时间:2013-11-21 17:53:00

标签: validation jsf primefaces

我在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是相同的)
  • 验证-API-1.1.0.Final.jar
  • Eclipselink(JPA 2.1)
  • 冬眠验证器-4.2.0.Final.jar
  • JSTL 1.1
  • Java EE 5

我在<h:form/>内有一个<p:dialog/>来编辑/创建实体,并将它们保存到数据库中。

我的问题是,当值直接设置为实体的属性时,<p:commandButton/>不会调用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中声明的简单String变量而不是在它工作的实体中。像这样:

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

我认为这是一个验证问题,但如果我把这个表格放在Dialog之外就行了。

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

感谢。

1 个答案:

答案 0 :(得分:0)

这就是我如何解决这个以及我遇到的其他问题:

在我的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">

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

我不得不用CSS解决所有问题,但我不喜欢这种方式,这是无法辨认的!此外,对话框显示在页面底部。因此,在尝试了一些事情之后,我修复了使用HTML而不仅仅是<ui:composition/>制作模板客户端。所以我可以删除我对CSS文件所做的所有“强制更改”(我真的不知道为什么只有<ui:composition/>的行为。)

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

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

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