wjr*_*wjr 5 jsf richfaces ajax4jsf
我的目标是将屏幕宽度,高度等放入JSF中的会话bean中.根据我发现的例子中,要做到这一点的方法是添加一个参数去一个命令与JavaScript的是一个值.然后将该值传输到assignTo bean变量.应该使用noEscape属性,以便传递值而不是变量名.
这几乎可行.发生的事情是文字变量名称,例如"screen.height"在bean中而不是数字,例如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>
Run Code Online (Sandbox Code Playgroud)
哪里
<script>
function getWidth() {
return screen.width;
}
</script>
Run Code Online (Sandbox Code Playgroud)
同样,具体问题是我将变量名称放入bean中,而不是变量值.任何帮助将非常感激.
您的方法无法工作,因为a4j:param与plain一起使用时,不会在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>
Run Code Online (Sandbox Code Playgroud)
另一个解决方案是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);" />
Run Code Online (Sandbox Code Playgroud)
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());
}
}
Run Code Online (Sandbox Code Playgroud)
注意 :
为了简单起见,我已经采取了移动每个getter/setter在同一个bean内部的自由度,同时也将更h:commandButton改为plain input按钮.
更多信息 :
| 归档时间: |
|
| 查看次数: |
7780 次 |
| 最近记录: |