我正在尝试根据辅助bean中的值格式化panelgrid。
我目前正在尝试将其作为onmouseover属性的值:
this.className=#{(actions.currentlySelectedActionButton == 0)?'actionButton actionButtonChosen':'actionButton'};
而CSS看起来像这样:(相关部分):
.actionButton {
width: 100%;
height: 20px;
border: thin solid #000;
cursor:default;
}
.actionButtonChosen {
background-color: blue;
}
它不起作用。 发现错误的任何人都会对我有所帮助。 谢谢!
编辑1 查看HTML源代码我似乎无法找到元素上列出的属性。 我将该属性指定为来自辅助bean的ValueExpression。
有效的'非值表达式'语法是:
button.setOnmouseout("this.className='actionButton'");
值表达式语法似乎根本不显示为attrbute:
ExpressionFactory ef = FacesContext
.getCurrentInstance().getApplication().getExpressionFactory();
String veString = "(#{actions.currentlySelectedActionButton} = '0')?'actionButton actionButtonChosen':'actionButton'}";
ValueExpression ve = ef.createValueExpression(FacesContext
.getCurrentInstance().getELContext(), veString, String.class);
button.setValueExpression("onmouseover", ve);
再次感谢。
答案 0 :(得分:1)
看起来像JavaScript。因此,您基本上使用JSF / EL生成JavaScript代码。您需要验证结果是否正确(即它在语法上是否有效且可运行)。只需在您喜欢的webbrowser中打开JSF页面,右键单击它并选择查看源并验证它是否正确。你看到了什么?在生成的输出中的任何地方都应该有逻辑上 no Java / JSF / EL代码。
答案 1 :(得分:0)
好。这是我在google chrome开发人员屏幕上发现的语法问题。
"..sen':'actionButton'}" //<--- Redundant '}'
"ctionButton} = '0'" //<-- '=' should be '=='
除此之外,这种方法效果很好。