我有这样的表格:
<h:form>
<h:outputText value="Tag:" />
<h:inputText value="#{entryRecorder.tag}">
<f:ajax render="category" />
</h:inputText>
<h:outputText value="Category:" />
<h:inputText value="#{entryRecorder.category}" id="category" />
</h:form>
我想要实现的目标:当您在“标记”字段中输入内容时,entryRecorder.tag
字段会根据输入的内容进行更新。根据此操作的一些逻辑,bean还会更新其category
字段。这种变化应该反映在表格中。
问题:
EntryRecorder
我应该使用什么范围?对于多个AJAX请求,请求可能不会令人满意,而会话将无法在每个会话中使用多个浏览器窗口。updateCategory()
中注册我的EntryRecorder
操作,以便在更新bean时触发它?答案 0 :(得分:0)
回答第2点:
<h:inputText styleClass="id_tag" value="#{entryRecorder.tag}"
valueChangeListener="#{entryRecorder.tagUpdated}">
<f:ajax render="category" event="blur" />
</h:inputText>
豆:
@ManagedBean
@ViewScoped
public class EntryRecorder {
private String tag;
private String category;
@EJB
private ExpenseService expenseService;
public void tagUpdated(ValueChangeEvent e) {
String value = (String) e.getNewValue();
setCategory(expenseService.getCategory(value));
}
}
1号,还有谁?
答案 1 :(得分:0)
要点1,我将使用Request,因为没有必要使用View和Session,正如你所指出的那样,完全没必要。
对于第2点,因为您正在使用&lt; f:ajax /&gt;我建议充分利用它。这是我的建议:
XHTML:
<h:form>
<h:outputText value="Tag:" />
<h:inputText value="#{entryRecorder.tag}">
<f:ajax render="category" event="valueChange"/>
</h:inputText>
<h:outputText value="Category:" />
<h:inputText value="#{entryRecorder.category}" id="category" />
</h:form>
请注意使用valueChange事件而不是模糊(不是模糊不起作用,但我发现valueChange更适合值保持器组件)。
豆:
@ManagedBean
@RequestScoped
public class EntryRecorder {
private String tag;
private String category;
public String getCategory() {
return category;
}
public String getTag() {
return tag;
}
public void setCategory(String category) {
this.category = category;
}
public void setTag(String tag) {
this.tag = tag;
tagUpdated();
}
private void tagUpdated() {
category = tag;
}
}
除非您真的希望tagUpdated方法仅在通过视图更新标记时执行,否则我的提案看起来更清晰。您不必处理事件(也不需要强制转换),并且tagUpdated方法可以隐藏它的功能,使其免于可能的滥用。