可能我错误地使用了表单。想法是detail.content显示一些HTML,这部分工作正常。表格应该允许多个(一对多的音符输入并显示在右侧。
显示默认音符时,不会显示更多音符。如何将note bean链接到detail bean?我正在考虑一个字符串“id”并将其从一个bean传递给另一个bean。
这类似于passing params from one view.xhtml to another的想法,除了它都在一页上。我想保持豆类清晰。最后,我想用EJB做这个,所以想要保持该选项的开放,而不是使用EJB。
view,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相互了解。
答案 0 :(得分:4)
使用@Inject
。
@Named
public class Notes {
@Inject
private Detail detail;
}
在Notes
方法之后的@PostConstruct
实例中,它将在<f:metadata>
实例中可用。反过来也可以。在你的特定情况下,父子关系是什么并不完全清楚。
无关,你有一些奇怪的视图标记。在定义顶部只有一个#{detail.back()}
就足够了。此外,getBack()
作为值表达式是奇数。您应该使用#{detail.back}
方法并将其引用为forward()
。 {{1}}也是如此。此外,EJB与这一切无关。您是否计划使用EJB与此特定问题无关。我建议通过一本体面的书/教程来学习JSF,而不是将一些松散的片段拼凑在一起而不理解完整的图片。