我是JSF的新手,我想在成功执行操作时花费一些文本。但输出文本,并不是在动作成功执行时。
这是视图(deactivatePerson.xhtml):
<h:outputText value="#{msg.personIsDeactivate}" rendered="#{isPersonDeactivate}" />
<h:form>
<h:commandButton action="#{controller.deactivate}" value="#{msg.deactivate}" />
</h:form>
这是托管bean:
@ManagedBean
@SessionScoped
public class Controller {
private boolean isPersonDeactivate = false;
public String deactivate() {
isPersonDeactivate = false; // Deactivate process...
isPersonDeactivate = true;
return "persondeactivate";
}
//Getter and Setter
}
以下是faces-config.xml
:
<navigation-rule>
<navigation-case>
<from-outcome>persondeactivate</from-outcome>
<to-view-id>/deactivatePerson.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
有人可以告诉我这里的错误吗?
答案 0 :(得分:2)
您忘记将其引用为#{controller}
托管bean的属性。目前还不清楚你的getter是什么样的,但是布尔属性应该有一个以is
为前缀而不是get
的getter。属性名称本身最好不要有is
前缀。它应该是一个动词陈述。
因此,更是如此:
private boolean personDeactivated;
public boolean isPersonDeactivated() {
return personDeactivated;
}
然后你可以按如下方式引用它:
<h:outputText ... rendered="#{controller.personDeactivated}" />
无关,导航案例因为新的JSF 2.0隐式导航而变得多余。只需让您的操作方法返回"deactivatePerson"
,它就会转到正确的视图,而不需要<navigation-case>
。确保您正在阅读正确的JSF 2.x目标资源,而不是JSF 1.x目标资源。