Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSF命令按钮';使用渲染时不调用的操作_Jsf_Jsf 2_Cdi - Fatal编程技术网

JSF命令按钮';使用渲染时不调用的操作

JSF命令按钮';使用渲染时不调用的操作,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:

使用?mode=test查看此页面时,按钮不起作用。它加载此页面时不带?mode=test,但会呈现h:panelGroup(因为模式是在其他地方设置的)。我使用两种发送方式(h:inpurthidden f:param)和发送到服务器,但没有任何帮助。视图作用域bean在CDI中不可用。解决这个问题的可能办法是什么

XHTML


你有各种各样的可能性。最简单的方法是不将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注释来实现

另请参见:


谢谢!我是否应该忽略IDE不能解析变量“mode”的警告?
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);
    }

}