您的方法无法工作,因为a4j:param
与 plain 一起使用时不会在 JavaScript 中评估 value 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);" />
豆子代码:
@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
按钮。
更多信息: