我的目标是将屏幕宽度,高度等放入JSF中的会话bean中。根据我发现的示例,执行此操作的方法是向commandButton添加一个param,其值为javascript。然后将该值传输到assignTo bean变量。应该使用noEscape属性,以便传递值而不是变量名。
这几乎可行。发生了什么是文字变量名称,例如" screen.height"缠绕在豆而不是数字,例如600.我尝试更改它以便它调用脚本功能,但这没有帮助。 (注意,我将params放在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>
同样,具体问题是我将变量名称输入bean,而不是变量值。任何帮助将不胜感激。
答案 0 :(得分:6)
您的方法无法正常工作,因为与普通a4j:param
一起使用时,JavaScript中未评估h:commandButton
值。您需要改为使用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>
另一个解决方案是a4j:jsFunction
,您可以将此JavaScript值发送给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);" />
Bean代码:
@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());
}
}
注意:
为了简单起见,我采取了移动每个getter / setter在同一个bean内部的自由度,同时将h:commandButton
更改为普通input
按钮。
更多信息: