Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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 使用a4j:param将JavaScript值传递给Bean_Jsf_Richfaces_Ajax4jsf - Fatal编程技术网

Jsf 使用a4j:param将JavaScript值传递给Bean

Jsf 使用a4j:param将JavaScript值传递给Bean,jsf,richfaces,ajax4jsf,Jsf,Richfaces,Ajax4jsf,我的目标是将屏幕的宽度、高度等输入JSF中的会话bean中。根据我发现的示例,实现这一点的方法是向commandButton添加一个参数,其值为javascript。然后将该值传输到AssignTobean变量。noEscape属性的作用是传递值而不是变量名 这几乎奏效了。发生的情况是,文本变量名,例如“screen.height”,在bean中结束,而不是数字,例如600。我尝试更改它,以便它调用脚本函数,但没有帮助。(注意,我将参数放在commandButton中,因为示例显示了这种方式,而

我的目标是将屏幕的宽度、高度等输入JSF中的会话bean中。根据我发现的示例,实现这一点的方法是向commandButton添加一个参数,其值为javascript。然后将该值传输到AssignTobean变量。noEscape属性的作用是传递值而不是变量名

这几乎奏效了。发生的情况是,文本变量名,例如“screen.height”,在bean中结束,而不是数字,例如600。我尝试更改它,以便它调用脚本函数,但没有帮助。(注意,我将参数放在commandButton中,因为示例显示了这种方式,而这个按钮是一个方便的地方,无论如何应用程序都需要它)

我有以下代码

<h:commandButton value="Log In"  action="#{loginBean.login}" styleClass="buttons">
   <a4j:param name="w" value="getWidth()" assignTo="#{browser.screenWidth}" noEscape="true" />
   <a4j:param name="h" value="screen.height" assignTo="#{browser.screenHeight}" noEscape="true" />
   <a4j:param name="a" value="navigator.userAgent" assignTo="#{browser.userAgent}" noEscape="true" />
</h:commandButton>

在哪里

<script>
  function getWidth() {
    return screen.width;
  }
</script>

函数getWidth(){
返回屏幕宽度;
}

同样,具体的问题是我将变量名放入bean中,而不是变量值。任何帮助都将不胜感激。

您的方法无法工作,因为当与普通
h:commandButton
一起使用时,
a4j:param
值不会在JavaScript中计算。您需要改用
a4j:commandButton

<a4j:commandButton value="Log In" action="#{loginBean.login}" styleClass="buttons">
   <a4j:param name="w" value="getWidth()" assignTo="#{browser.screenWidth}" noEscape="true" />
   <a4j:param name="h" value="screen.height" assignTo="#{browser.screenHeight}" noEscape="true" />
   <a4j:param name="a" value="navigator.userAgent" assignTo="#{browser.userAgent}" noEscape="true" />
</a4j:commandButton>
Bean代码:

<a4j:jsFunction name="login" action="#{loginBean.login}">
    <a4j:param name="screenWidth" assignTo="#{loginBean.screenWidth}" />
    <a4j:param name="screenHeight" assignTo="#{loginBean.screenHeight}" />
    <a4j:param name="userAgent" assignTo="#{loginBean.userAgent}" />
</a4j:jsFunction>

<input type="button" onclick="login(screen.width,screen.height,navigator.userAgent);" />
@ManagedBean
@ViewScoped
public class TestJavaScriptActions
{
    private Integer m_iScreenWidth;
    private Integer m_iScreenHeight;
    private String m_sUserAgent;

    public void setScreenWidth(Integer p_iScreenWidth)
    {
        m_iScreenWidth = p_iScreenWidth;
    }

    public Integer getScreenWidth()
    {
        return m_iScreenWidth;
    }

    public void setScreenHeight(Integer p_iScreenHeight)
    {
        m_iScreenHeight = p_iScreenHeight;
    }

    public Integer getScreenHeight()
    {
        return m_iScreenHeight;
    }

    public void setUserAgent(String p_sUserAgent)
    {
        m_sUserAgent = p_sUserAgent;
    }

    public String getUserAgent()
    {
        return m_sUserAgent;
    }

    public void login()
    {
        System.out.println(getScreenWidth() + ", " + getScreenHeight() + ", " + getUserAgent());
    }
}
注意:

<a4j:jsFunction name="login" action="#{loginBean.login}">
    <a4j:param name="screenWidth" assignTo="#{loginBean.screenWidth}" />
    <a4j:param name="screenHeight" assignTo="#{loginBean.screenHeight}" />
    <a4j:param name="userAgent" assignTo="#{loginBean.userAgent}" />
</a4j:jsFunction>

<input type="button" onclick="login(screen.width,screen.height,navigator.userAgent);" />
@ManagedBean
@ViewScoped
public class TestJavaScriptActions
{
    private Integer m_iScreenWidth;
    private Integer m_iScreenHeight;
    private String m_sUserAgent;

    public void setScreenWidth(Integer p_iScreenWidth)
    {
        m_iScreenWidth = p_iScreenWidth;
    }

    public Integer getScreenWidth()
    {
        return m_iScreenWidth;
    }

    public void setScreenHeight(Integer p_iScreenHeight)
    {
        m_iScreenHeight = p_iScreenHeight;
    }

    public Integer getScreenHeight()
    {
        return m_iScreenHeight;
    }

    public void setUserAgent(String p_sUserAgent)
    {
        m_sUserAgent = p_sUserAgent;
    }

    public String getUserAgent()
    {
        return m_sUserAgent;
    }

    public void login()
    {
        System.out.println(getScreenWidth() + ", " + getScreenHeight() + ", " + getUserAgent());
    }
}
为了简单起见,我在同一个bean中移动了每个getter/setter,并将
h:commandButton
更改为普通
input
按钮

更多信息:

<a4j:jsFunction name="login" action="#{loginBean.login}">
    <a4j:param name="screenWidth" assignTo="#{loginBean.screenWidth}" />
    <a4j:param name="screenHeight" assignTo="#{loginBean.screenHeight}" />
    <a4j:param name="userAgent" assignTo="#{loginBean.userAgent}" />
</a4j:jsFunction>

<input type="button" onclick="login(screen.width,screen.height,navigator.userAgent);" />
@ManagedBean
@ViewScoped
public class TestJavaScriptActions
{
    private Integer m_iScreenWidth;
    private Integer m_iScreenHeight;
    private String m_sUserAgent;

    public void setScreenWidth(Integer p_iScreenWidth)
    {
        m_iScreenWidth = p_iScreenWidth;
    }

    public Integer getScreenWidth()
    {
        return m_iScreenWidth;
    }

    public void setScreenHeight(Integer p_iScreenHeight)
    {
        m_iScreenHeight = p_iScreenHeight;
    }

    public Integer getScreenHeight()
    {
        return m_iScreenHeight;
    }

    public void setUserAgent(String p_sUserAgent)
    {
        m_sUserAgent = p_sUserAgent;
    }

    public String getUserAgent()
    {
        return m_sUserAgent;
    }

    public void login()
    {
        System.out.println(getScreenWidth() + ", " + getScreenHeight() + ", " + getUserAgent());
    }
}
  • 你也可以直接服用

谢谢。这解决了我的问题。不太清楚我是怎么错过了h vs a4j部分的。