1

我所做的是在字段中不传递值并发送以给出所需字段的错误消息,然后我在字段中传递值并再次发送。在tomcat中工作,请求中的glassfish未发送。有谁知道可能会发生什么?

发生了什么的图片

发生了什么的图片,控制台 javascript 上的错误

我真的不知道发生了什么,有人知道吗?我使用 Tomcat 7 和 Glassfish 3,Primefaces 3.4.2 e Primefaces Extensions 0.6.2。在 .ear 企业项目中。

:===============: 补充增强理解。:===============:

大家好,这个问题很难解决,然后在其他地方搜索后我看到(不确定在哪里)这可能是我的项目依赖项中的问题。所以我决定以primefaces网站为例,从三个角度进行复现。

  1. 使用 Tomcat 运行(已工作)
  2. 与 Glassfish 一起跑步(工作)
  3. 在我的项目中使用 Glassfish 运行(未工作)

在1和2上,刚刚做了一个ctrl + C / ctrl + V的primefaces网站例子,这样:

索引.xhtml:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="pt-br" 
      xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:p="http://primefaces.org/ui">
    <f:view>
        <h:head/>
        <h:body>
            <h:form id="form">  
                <p:panel id="panel" header="New Person">  
                    <p:messages id="msgs"/>  
                    <h:panelGrid columns="3">  
                        <h:outputLabel for="firstname" value="Firstname: *" />  
                        <p:inputText id="firstname" value="#{testMB.name}" required="true" label="Firstname">  
                            <f:validateLength minimum="2" />  
                        </p:inputText>  
                        <p:message for="firstname" display="icon"/>  
                        <h:outputLabel for="surname" value="Surname: *" />  
                        <p:inputText id="surname" value="#{testMB.name}" label="Surname" required="true">  
                            <f:validateLength minimum="2" />  
                            <p:ajax update="msgSurname" event="keyup" />  
                        </p:inputText>  
                        <p:message for="surname" id="msgSurname" display="icon"/>  
                    </h:panelGrid>  
                    <p:commandButton id="btn" value="Save" update="panel" actionListener="#{testMB.save(actionEvent)}"/>  
                </p:panel>  
            </h:form> 
        </h:body>
    </f:view>
</html>

TestManagedBean.java:

@ManagedBean(name="testMB")
@RequestScoped
public class TestManagedBean
{
  private String name;
  private String surname;

  public String getName()
  {
    return this.name;
  }

  public void setName(String name) {
    this.name = name;
  }

    public String getSurname() {
        return surname;
    }

    public void setSurname(String surname) {
        this.surname = surname;
    }

  public void save(ActionEvent actionEvent) {
    addMessage(FacesMessage.SEVERITY_INFO, "TEST: " + this.name);
  }

  public void addMessage(FacesMessage.Severity s, String summary) {
    FacesMessage message = new FacesMessage(s, summary, null);
    FacesContext.getCurrentInstance().addMessage(null, message);
  }
}

在 3 岁时,我也这样做了,但是要使用计划的架构,正在使用 shiro、facelets、布局 primefaces 扩展等的安全过滤器......我检查了 shiro 并且没有过滤器阻止某些事情,其他依赖项也看起来和我发现在 ejb 模块中我声明了 primefaces(因为我使用的是 primefaces 的 SortOrder 模型类),而 web 模块也声明了 primefaces 和 primefaces 扩展。

项目依赖性与问题有关吗?去掉ejb模块中primefaces的依赖,只在web模块中声明primefaces会更合适吗?(我在这里试过,但是web模块可以看到ejb模块但是相反的没有发生,我该怎么做?)

谢谢大家,对不起我的英语,我是巴西人。

4

2 回答 2

1

您的 EJB 不应该引用 Primefaces,并且应该尽可能独立于平台(尽管事实上不依赖于 Hibernate/EclipseLink 是不切实际的

这是我使用的结构:

EAR
  |- (1) WAR
  | \- Primefaces xhtml files etc.
  | |- backing beans (support components in the xhtml files)
  | |- dao beans (handle any interactions with the @Remote facades)
  | |- Dependencies: (2,3)
  |
  |- (2) JAR @Remote interfaces
  | \- Dependencies: (3)
  |
  |- (3) JAR @Entity objects
  | \- Dependencies: (none)
  |
  |- (4) @EJB Module
    \- @Local interfaces
    |- @Local implementations
    |- @Remote implementations
    |- Dependencies: (2,3)

两个关键部分是 WAR 和 EJB 模块。这两个都依赖于@Remote 和@Entity jar。它们根本不直接相互依赖。

当 ManagedBean 与 EJB 通信时,它通过调用 Remote 接口来实现,例如@EJB RemoteMyBeanInterface myBean,它实际上返回 EJB 模块中的实现(通过魔术)。

尝试分离模块,看看是否对您有帮助。如果没有,那么安全过滤器可能会产生一些干扰(可能是无声的)。您应该开始一个干净的新项目(如有必要,还需要新的服务器域);从 Primefaces 的剪切和粘贴代码开始,然后开始一一添加所有附加内容和过滤器,直到找到导致问题的原因。

如果您仍然感到困惑,请在 Primefaces 论坛上发帖和/或尝试引起BalusC的注意。由于他在这里发布的答案,我的大部分问题都得到了解决。

于 2013-02-08T13:33:20.880 回答
0

我遇到了类似的问题,虽然我担心我不记得我是如何修复它的,但我很确定它是通过添加以下内容来解决的web.xml

<context-param>
  <param-name>javax.faces.PARTIAL_STATE_SAVING</param-name>
  <param-value>false</param-value>
</context-param>

和/或

<context-param>
  <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
  <param-value>server</param-value>
</context-param>

我会伸出脖子说这是第一个代码片段,但它可能取决于或可能不取决于设置为服务器的状态保存方法。

于 2013-01-27T16:22:12.570 回答