2012-04-12 11 views
0

おそらく私はフォームを間違って使用しています。アイデアは、detail.contentがいくつかのHTMLを表示し、この部分はうまく動作するということです。フォームは複数の(1対多のメモを右に入力して表示できるようになっています)。単一のview.xhtmlのJSF Bean間でパラメータを渡す

デフォルトのメモが表示されますが、メモはありません。私は文字列 "id"を考えて、それをあるbeanから別のbeanに渡しました。

passing params from one view.xhtml to anotherのアイデアと似ていますが、それはすべて1ページにあります。 。、私はまだEJBのを使用していない一方で、EJBのでこれを行うと、その開いたそのオプションを維持したいしたいと思います

ビュー、detail.xhtml:

<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<ui:composition xmlns:ui="http://java.sun.com/jsf/facelets" 
       template="./complexTemplate.xhtml" 
       xmlns:h="http://java.sun.com/jsf/html" 
       xmlns:c="http://java.sun.com/jsp/jstl/core" 
       xmlns:f="http://java.sun.com/jsf/core"> 
    <ui:define name="top"> 
     <h:form> 
      <h:outputLink id="back" value="detail.xhtml"> 
       <f:metadata> 
        <f:viewParam name="id" value="#{detail.id}" /> 
       </f:metadata> 
       <f:param name="id" value="#{detail.back()}" /> 
       <h:outputText value="back" /> 
      </h:outputLink> 
     </h:form> 
     <h:form> 
      <h:outputLink id="forward" value="detail.xhtml"> 
       <f:metadata> 
        <f:viewParam name="id" value="#{detail.id}" /> 
       </f:metadata> 
       <f:param name="id" value="#{detail.forward()}" /> 
       <h:outputText value="forward" /> 
      </h:outputLink> 
     </h:form> 
    </ui:define> 
    <ui:define name="content"> 
     <h:outputText escape="false" value="#{detail.content}"></h:outputText> 
    </ui:define> 
    <ui:define name="right"> 
     <p>#{notes.note.id}</p> 
     <p>#{notes.note.comment}</p> 
     <h:form> 
      <h:inputText value="#{notes.note.comment}" /> 
      <h:commandButton value="add note" 
          action="#{notes.commentAction()}"/> 
     </h:form> 
    </ui:define> 
</ui:composition> 

豆、Notes.java:

package net.bounceme.dur.nntp; 

import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.enterprise.context.Dependent; 
import javax.inject.Named; 

@Named 
@Dependent 
public class Notes { 

    private static final long serialVersionUID = 1L; 
    private static final Logger logger = Logger.getLogger(Notes.class.getName()); 
    private static final Level level = Level.INFO; 
    private Note note = new Note(); 

    public Notes() { 
     logger.log(level, "Notes.."); 
    } 

    public Note getNote() { 
     return note; 
    } 

    private void setNote(Note note) { 
     this.note = note; 
    } 

    public void commentAction() { 
     logger.log(level, "Notes.newNote..");  note.setId("messageIdGoesHere"); 
     note.setComment("hmmm"); 
    } 
} 

他の豆、詳細、正常に動作します。しかし、2つのBeanを1ページに統合して、2つのBeanが互いに認識できるようにする方法がわかりません。

答えて

4

@Injectを使用してください。

@Named 
public class Notes { 

    @Inject 
    private Detail detail; 

} 

それは@PostConstruct方法を超え一生の間にNotesインスタンスで利用可能になるでしょう。他の方法でラウンドすることもできます。あなたの特別なケースで親子関係が何であるかは完全にはっきりしていません。具体的な問題への無関係


、あなたはそこにいくつかの奇妙なビューのマークアップをしました。定義の先頭には<f:metadata>の1つで十分です。また、値式としての#{detail.back()}は奇数です。 getBack()メソッドがあり、#{detail.back}という名前で参照する必要があります。 forward()でも同じです。また、EJBはこのすべてとは関係ありません。 EJBを使用するかどうかは、この特定の問題とは関係ありません。まともな本/チュートリアルでJSFを学習することをお勧めします。

関連する問題