【问题标题】:change color of inputtext at row level on selectOneMenu(Dropdown) change in Datatable在 Datatable 中的 selectOneMenu(Dropdown) 更改行级别更改 inputtext 的颜色
【发布时间】:2012-07-20 11:59:26
【问题描述】:

我在我的应用程序中使用 primefaces(v.3.0) 数据表。 在Datatable中有两列,一列是inputtext,另一列是SelectOneMenu(dropdown)。

现在我想在某些情况下更改输入文本颜色,例如..

1.如果 SelectOneMenu 值被选为“Single”,则输入文本框颜色将仅为该特定 pID 的“绿色”。

2.如果 SelectOneMenu 值被选为“已婚”,则输入文本框的颜色将仅为该特定 pID 的“红色”。

3.如果 SelectOneMenu 值被选为“离婚”,则输入文本框的颜色将仅为该特定 pID 的“黄色”。

所以我正在尝试这种方式....

   <h:form id="form">
<h:panelGrid columns="2" cellpadding="10" id="h">
        <p:dataTable id="table" var="s"
                                value="#{backingBean.arrayList}"
                                widgetVar="empTable" rowKey="#{pt.pID}"
                                paginator="true" rows="15"
style="width: 100%;margin-bottom: 10px;" rowStyleClass="#{s.status}">

                                <f:facet name="header">  
           List of Patients Appointments  
        </f:facet>

                                <p:column headerText="Status" id="t">

                        <p:inputText value="#{s.status}" />

                    </p:column>


                        <p:column headerText="EmployeeAction">
                        <p:selectOneMenu id="scAction" value="#{backingBean.obj.empStatus}"
                                style="width:125px">
                                        <f:selectItem itemLabel="Select" itemValue="" />
                                        <f:selectItems value="#{schedulerBB.scheduleActionSelect}"
                                            itemLabel="#{backingBean.obj.empStatus}"
                                            itemValue="#{backingBean.obj.empStatusID}" />
                                    <p:ajax event="change" listener="#{backingBean.changeColor(s)}"  update=":form" />


                                    </p:selectOneMenu>

                                </p:column>

                        </p:dataTable>
                        </h:panelGrid>
                        </h:form>

In CSS

.Single td:nth-child(1) input {
    background-color: green;
}

.Married td:nth-child(1) input {
    background-color: red;
}

.Divorced td:nth-child(1) input {
    background-color: yellow;
}

In BackingBean:

private Employee obj;

    //Getter setter methods

    public Employee getObj() {
    if(obj==null){
    obj=new Employee();
    }
    return obj;
}

public void setObj(Employee obj) {
    this.obj = obj;
}


public void changeColor(Employee e){

  if(obj.getEmpStatus().equals("1")){  

        EmployeeDAO.updateEmpTable(e.getPID,e.getStatus);

    }

    css
    .Single td:nth-child(1) input {
    background-color: green;
}

.Married td:nth-child(1) input {
    background-color: red;
}

.Divorced td:nth-child(1) input {
    background-color: yellow;
}

我可以更改特定 pID 的 selectonemenu 更改时的输入文本值,但您可以 请参阅我在列级别应用了 inputtextbox 颜色更改逻辑,因此所有列 inputtext 颜色都会更改。

那么我如何在行级别应用更改输入文本框颜色的逻辑(即仅适用于特定 ID)

【问题讨论】:

    标签: jsf-2 primefaces


    【解决方案1】:

    您可以对匹配条件的行使用不同的样式类。

    在您的页面中使用此样式类将根据状态启用:

    <p:dataTable id="table" var="s" value="#{backingBean.arryList}" widgetVar="EmployeeTable" rowKey="#{s.pID}" paginator="true" rows="15" style="width: 100%;margin-bottom: 10px;" rowStyleClass=#{s.status}>
        <p:column id="st">
            <f:facet name="header">  
                <h:outputText value="Status" />  
            </f:facet>  
            <p:inputText value="#{s.status}" style="width:90px;"/>
        </p:column>
    
        <p:column headerText="Employee Status">
            <p:selectOneMenu value="#{backingBean.obj.empStatus}" style="width:125px">
                <f:selectItem itemLabel="Select" itemValue="" />
                <f:selectItems value="#{BackingBean.empStatusActionSelect}"
                    itemLabel="#{backingBean.obj.empStatus}"
                    itemValue="#{backingBean.obj.empStatusID}" />
                    <p:ajax event="change" listener="#{backingBean.changeColor}" update="table"/>
            </p:selectOneMenu>
    </p:dataTable>
    

    在您的 CSS 中,您需要以下内容:

    .Single td:nth-child(1) input {
        background-color: green;
    }
    
    .Married td:nth-child(1) input {
        background-color: red;
    }
    
    .Divorced td:nth-child(1) input {
        background-color: yellow;
    }
    

    这样,表格行第一列中的输入元素将获得背景颜色,绿色、红色或黄色。

    注意:#{s.status} 的结果必须是“单身”、“已婚”或“离婚”。

    【讨论】:

    • 我试过和你提到的一样,s.status 值必须是“单身”或“已婚”或“离婚”,是的,当我从下拉列表中更改任何操作时,我的状态值会完全改变,但我的 inputtext 颜色并没有按照你的方式改变。例如;如果我选择“single”作为操作,我的状态值会完美地更改为“single”,但 inputtext 颜色不会改变。我错过了什么吗?我根据您的建议更新了我的,请查看。
    • 该示例正在运行,请注意#{s.status} 的结果和样式类必须匹配并且区分大小写。如果应用了正确的样式,也许可以用 Firebug 之类的东西来检查。
    【解决方案2】:

    这里的代码非常适合我。

       <p:dataTable id="table" var="s" value="#{backingBean.myArraylist}" widgetVar="EmployeeTable" rowKey="#{s.pID}" paginator="true" rows="15" style="width: 100%;margin-bottom: 10px;" >
            <p:column id="st">
                <f:facet name="header">  
                    <h:outputText value="Status" />  
                </f:facet>  
                <p:inputText value="#{s.status}" style="width:90px;" style="#{s.color}"/>
            </p:column>
    
            <p:column headerText="Employee Status">
                <p:selectOneMenu value="#{backingBean.obj.empStatus}" style="width:125px">
                    <f:selectItem itemLabel="Select" itemValue="" />
                    <f:selectItems value="#{BackingBean.empStatusActionSelect}"
                        itemLabel="#{backingBean.obj.empStatus}"
                        itemValue="#{backingBean.obj.empStatusID}" />
                        <p:ajax event="change" listener="#{backingBean.changeColor}" update="table"/>
                </p:selectOneMenu>
        </p:dataTable>
    

    在Backing bean中以这种方式迭代datatabale arraylist并为inputtext设置颜色。

    在 Employee 类中使用它的 getter 和 setter 来定义颜色变量。

        myArraylist = myDAO.getEmployeeList();
        for (Employee s : myArraylist) {
                            if(s.getStatus().equals("Single")){
                                s.setColor("background-color : green");
                            }   
                        else if(s.getStatus().equals("Married")){
                                s.setColor("background-color : red");
                            }   
                        else if(s.getStatus().equals("Divorced")){
                                s.setColor("background-color : yellow");
                            }
    }
    

    【讨论】:

      【解决方案3】:

      您可以在数据表上使用 primefaces 的 rowStyleClass 属性。 在 rowStyleClass 属性中,您可以使用三元运算符(如您的情况,类似

      #{backingBean.obj.empStatus eq single? green: blue}
      

      三元运算符的结果应该与您已经在该页面上加载的 css 样式类相对应

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-02-28
        • 2020-02-04
        • 1970-01-01
        • 1970-01-01
        • 2019-07-26
        • 2018-01-11
        • 1970-01-01
        • 2019-05-29
        相关资源
        最近更新 更多