gpt4 book ai didi

java - 在单个 view.xhtml 的 JSF beans 之间传递参数

转载 作者:行者123 更新时间:2023-12-01 19:05:53 25 4
gpt4 key购买 nike

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

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

这和passing params from one view.xhtml to another的想法类似,只不过全部都在一页上。我想让 bean 保持独特。最终,我想使用 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 相互了解。

最佳答案

使用@Inject .

@Named
public class Notes {

@Inject
private Detail detail;

}

它将在 Notes 中提供实例在 @PostConstruct 之外的生命周期内方法。反过来也可以。在您的具体情况下,尚不完全清楚亲子关系是什么。

<小时/>

与具体问题无关,您有一些奇怪的 View 标记。只有一个<f:metadata>在定义之上就足够了。另外,#{detail.back()}因为值表达式是奇数。你应该有一个getBack()方法并将其引用为 #{detail.back}forward() 相同。而且,EJB 与这一切无关。您是否计划使用 EJB 与这个特定问题无关。我建议通过一本像样的书/教程来学习 JSF,而不是在不了解完整情况的情况下将一些松散的片段拼凑在一起。

关于java - 在单个 view.xhtml 的 JSF beans 之间传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10117184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com