css表达式不适用于primefaces

时间:2012-06-12 06:34:51

标签: java css jsf-2 primefaces

下面的代码不起作用,但它适用于jsf1.2。 现在框架是jsf2.0和primefaces 3.2

<p:inputText id="pInputText4"  disabled="true" value="This is Input
Text" style="color:
expression((this.disabled==true)?'#0f0':'#f00');"/>

我有另一个问题,为什么

<p:selectOneMenu id="roleId" value="#{accessPage.roleId}" required="true">
   <f:selectItem itemLabel="#{msg['label.common.selecthere']}" itemValue="#{null}" />
   <f:selectItems var="code" value="#{accessPage.roleIdList}"   
       itemLabel="#{code.codeDesc}" itemValue="#{code.codeId}" />
   <f:valueChangeListener type="com.ncs.caseconnect.base.app.utils.ValueChangeCleanUtils"/>
   <p:ajax listener="#{accessPage.roleOrModuleChanged}" update="accessRight" />
</p:selectOneMenu>

当我们选择第一个null选项时,valueChangeListener和ajax不起作用。如果我们删除所需的属性,它工作正常。是否与requiredChangeListener之间存在冲突?

2 个答案:

答案 0 :(得分:1)

您可以在任何组件的属性中使用#{component}来获取当前组件的具体UIComponent实例。如果<p:inputText>的{​​{1}}实例具有boolean disabled属性,则会解决此问题。所以,这应该做:

<p:inputText id="pInputText4" disabled="true" value="This is Input Text" 
    style="color: #{component.disabled ? '#0f0' : '#f00'};" />

但更好的做法是在CSS文件中定义样式而不是在标记中直接定义样式,因为它可以消除重复和维护问题。

<p:inputText id="pInputText4" disabled="true" value="This is Input Text" 
    styleClass="foo" />

.foo {
    color: #f00;
}

.foo[disabled] {
    color: #0f0;
}

或者,如果您想在所有输入元素上全局应用

<p:inputText id="pInputText4" disabled="true" value="This is Input Text" />

input {
    color: #f00;
}

input[disabled] {
    color: #0f0;
}

答案 1 :(得分:0)

我猜你最终会使用disabled="#{someBean.someCondition}"

在这种情况下,您必须在style中使用EL表达式,就像这样

<p:inputText id="pInputText4"  disabled="#{someBean.someCondition}" value="This is Input
    Text" style="color:#{someBean.someCondition ?'#0f0':'#f00'}"/>

关于expression的Dunno,但您确定可以访问this并且this.disabled确实为您提供了disabled属性的值吗? (尝试在alert(this.disabled)

中显示