2013-01-23 27 views
1

我要做的就是在田裏沒有傳遞價值,併發送給必填字段的錯誤消息,然後我在田野傳遞值,並再次發送。在tomcat中工作,請求中的glassfish不會發送。有誰知道可能會發生什麼?爲什麼commandButton在我的表單中運行在tomcat中,並且不能在glassfish中運行?

Picture of what happens

Picture of what happens, error on console javascript

我真的不知道發生了什麼,誰知道? 我使用Tomcat 7和Glassfish 3,Primefaces 3.4.2 e Primefaces Extensions 0.6.2。在一個.ear企業項目中。

:===============:補充增進了解。 :===============:

好傢伙,這個問題很難在其他地方進行搜索後我看到了(不知道在哪裏),可能是在我的項目依賴的問題解決,然後。所以我決定採用primefaces網站的例子,並從三個角度重現它。

  1. 與Tomcat的運行(工程)
  2. 與Glassfish的運行(工程)
  3. 在我的項目(不任職)

在1和2 Glassfish的運行,只是做了CTRL + C/CTRL primefaces site示例的+ V,以這種方式:

的index.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,我也照樣做了,但是通過使用計劃的架構,是利用四郎,小面,佈局primefaces擴展等的安全過濾器是...我查了四郎和沒有過濾器阻止的東西,其他的依賴也看了一下,我發現的是,在EJB模塊中我宣佈primefaces(因爲我使用的SortOrder的模型類primefaces)和網絡模塊還宣佈primefaces和primefaces擴展。

有項目扶養事做的問題? 刪除ejb模塊中primefaces的依賴關係並僅在web模塊中聲明primefaces會更合適? (我想在這裏,但Web模塊可以看到EJB模塊,但相反的情況不會發生,我該怎麼辦呢?)

謝謝大家和抱歉,我的英語水平,我是巴西人。

回答

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 jars。 他們不直接相互依賴。

當ManagedBean與EJB通信時,它通過調用遠程接口(例如, @EJB RemoteMyBeanInterface myBean它實際上返回EJB模塊中的實現(通過魔術)。

嘗試分離模塊,看看是否有幫助。如果沒有,那麼安全過濾器可能會有一些干擾(可能是默默的)。你應該開始一個乾淨的新項目(如果需要+新的服務器域名);首先從Primefaces粘貼代碼&開始,然後開始逐個添加所有附加項和過濾器,直到找到導致問題的原因。

如果您仍然難住,請發佈到Primefaces論壇並/或嘗試引起BalusC的注意。感謝他在這裏發佈的答案,我的大部分問題都解決了。

+1

你好@KidTempo,這個問題真的存在於primefaces依賴關係中,他們在ejb模塊中而不是在web模塊中。在進行了更深入的研究之後,嘗試了一些可能性,但真正起作用的是隔離只有web模塊的primefaces。 謝謝! –

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> 

我要堅持我的脖子,並說這是第一代碼片段,但它可能會或可能不會依靠國家節能方法的設置爲服務器。

+0

我不認爲它現在還沒有。我試着用這些選項,錯誤仍然存​​在。我注意到的另一件事是,當沒有驗證錯誤時,應用程序中的表單工作,但當出現錯誤時(例如,驗證錯誤),不能發送請求。爲什麼? –

+0

@ViníciusFrança恐怕你不得不用一些堆棧跟蹤和代碼示例來更新你的問題。我建議你儘量減少你的代碼到最低限度以重新創建問題,以便讓其他人更容易發現問題。 – KidTempo

+0

對不起,延遲發表評論@KidTempo,我在度假,幾天沒有上網。問題得到改善,希望現在人們可以更好地理解這個問題。謝謝你的提示。 –

相關問題