【问题标题】:pass params between JSF beans for a single view.xhtml在 JSF bean 之间为单个 view.xhtml 传递参数
【发布时间】:2012-04-12 03:57:21
【问题描述】:

可能我使用的表单不​​正确。这个想法是 detail.content 显示一些 HTML,这部分工作正常。该表单应该允许输入多个(一对多的注释并显示在右侧。

虽然会显示默认注释,但不会显示更多注释。如何将注释 bean 链接到详细信息 bean?我正在考虑一个字符串“id”并将其从一个 bean 传递到另一个。

这类似于passing params from one view.xhtml to another 的想法,只是它都在一页上。我想让豆子与众不同。最终,我想用 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>

bean,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");
    }
}

另一个bean,Details,工作正常。但是,我不确定如何将两个 bean 集成到一个页面上,以便两个 bean 相互了解。

【问题讨论】:

    标签: java jsf ejb cdi


    【解决方案1】:

    使用@Inject

    @Named
    public class Notes {
    
        @Inject
        private Detail detail;
    
    }
    

    @PostConstruct 方法之后的生命周期内,它将在Notes 实例中可用。反过来也可以。在您的特定情况下,父子关系并不完全清楚。


    与具体问题无关,您有一些奇怪的视图标记。定义顶部只有一个&lt;f:metadata&gt; 就足够了。此外,#{detail.back()} 作为值表达式是奇数。您应该有一个getBack() 方法并将其引用为#{detail.back}forward() 也是如此。此外,EJB 与这一切无关。您是否计划使用 EJB 与这个特定问题无关。我建议通过一本像样的书/教程来学习 JSF,而不是在不了解完整情况的情况下拼凑一些松散的 sn-ps。

    【讨论】:

      猜你喜欢
      • 2014-01-21
      • 1970-01-01
      • 1970-01-01
      • 2011-06-30
      • 2013-07-09
      • 2012-07-22
      • 2012-07-17
      • 2013-09-27
      相关资源
      最近更新 更多