JSF命令按钮';使用渲染时不调用的操作
使用?mode=test查看此页面时,按钮不起作用。它加载此页面时不带?mode=test,但会呈现h:panelGroup(因为模式是在其他地方设置的)。我使用两种发送方式(h:inpurthidden f:param)和发送到服务器,但没有任何帮助。视图作用域bean在CDI中不可用。解决这个问题的可能办法是什么 XHTMLJSF命令按钮';使用渲染时不调用的操作,jsf,jsf-2,cdi,Jsf,Jsf 2,Cdi,使用?mode=test查看此页面时,按钮不起作用。它加载此页面时不带?mode=test,但会呈现h:panelGroup(因为模式是在其他地方设置的)。我使用两种发送方式(h:inpurthidden f:param)和发送到服务器,但没有任何帮助。视图作用域bean在CDI中不可用。解决这个问题的可能办法是什么 XHTML 你有各种各样的可能性。最简单的方法是不将view参数绑定到backingbean,而是将其绑定到视图: test.xhtml <html xmlns="http:
你有各种各样的可能性。最简单的方法是不将view参数绑定到backingbean,而是将其绑定到视图: test.xhtml
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core">
<f:view>
<f:metadata>
<f:viewParam name="mode" value="#{mode}" />
</f:metadata>
<h:form rendered="#{mode eq 'test'}">
<h:commandButton value="Run a method" action="#{test.method(mode)}" />
</h:form>
<h:messages />
</f:view>
</html>
但是,如果您想切换到@ViewScoped
,那么现在JSF2.2版本中提供了与CDI兼容的注释。您正在使用的名称空间建议您使用该版本,因此请继续使用它。对于JSF以前的版本,也有机会使用自定义Omnifaces注释来实现
另请参见:
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
@Named("test")
@RequestScoped
public class TestBean {
private String mode;
public void method() {
System.out.print(mode);
}
public String getMode() {
return mode;
}
public void setMode(String mode) {
this.mode = mode;
}
}
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core">
<f:view>
<f:metadata>
<f:viewParam name="mode" value="#{mode}" />
</f:metadata>
<h:form rendered="#{mode eq 'test'}">
<h:commandButton value="Run a method" action="#{test.method(mode)}" />
</h:form>
<h:messages />
</f:view>
</html>
@Named
@RequestScoped
public class Test {
public void method(String mode) {
System.out.print(mode);
}
}