Как условно разработать строку в rich:dataTable

вот что я нашел здесь: github

немного импровизировал. Очень просто и чисто. Нет внешних файлов или методов:

public class RoundedImageView extends ImageView {


private float mCornerRadius = 10.0f;

public RoundedImageView(Context context) {
    super(context);
}

public RoundedImageView(Context context, AttributeSet attributes) {
    super(context, attributes);
}



@Override
protected void onDraw(Canvas canvas) {
    // Round some corners betch!
    Drawable myDrawable = getDrawable();

    if (myDrawable!=null && myDrawable instanceof BitmapDrawable && mCornerRadius > 0) {
        Paint paint = ((BitmapDrawable) myDrawable).getPaint();
        final int color = 0xff000000;
        Rect bitmapBounds = myDrawable.getBounds();
        final RectF rectF = new RectF(bitmapBounds);
        // Create an off-screen bitmap to the PorterDuff alpha blending to work right
        int saveCount = canvas.saveLayer(rectF, null,
                Canvas.MATRIX_SAVE_FLAG |
                Canvas.CLIP_SAVE_FLAG |
                Canvas.HAS_ALPHA_LAYER_SAVE_FLAG |
                Canvas.FULL_COLOR_LAYER_SAVE_FLAG |
                Canvas.CLIP_TO_LAYER_SAVE_FLAG);
        // Resize the rounded rect we'll clip by this view's current bounds
        // (super.onDraw() will do something similar with the drawable to draw)
        getImageMatrix().mapRect(rectF);

        paint.setAntiAlias(true);
        canvas.drawARGB(0, 0, 0, 0);
        paint.setColor(color);
        canvas.drawRoundRect(rectF, mCornerRadius, mCornerRadius, paint);

        Xfermode oldMode = paint.getXfermode();
        // This is the paint already associated with the BitmapDrawable that super draws
        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
        super.onDraw(canvas);
        paint.setXfermode(oldMode);
        canvas.restoreToCount(saveCount);
    } else {
        super.onDraw(canvas);
    }
}


}

21
задан Luca Molteni 8 June 2009 в 09:00
поделиться

4 ответа

Я делаю, как вы уже упомянули, и добавляю стиль к столбцу.

Однако вы всегда можете попробовать заключить все свои столбцы в , который должен выводить и помещать в него свой условный стиль.

РЕДАКТИРОВАТЬ: (в ответ на комментарий): если фасеты заголовка в ваших столбцах нарушаются затем вы также можете разделить их на группу столбцов. Должно работать - вам может даже не понадобиться группа столбцов в заголовке ??

Например.

<rich:dataTable>
  <f:facet name="header">
    <rich:columnGroup>
      <rich:column>Header 1</rich:column>
      <rich:column>Header 1</rich:column>
    </rich:columnGroup>
  </f:facet>
  <rich:columnGroup>
    <rich:column>Data</rich:column>
    <rich:column>Data</rich:column>
  </rich:columnGroup>
</rich:dataTable>
5
ответ дан 29 November 2019 в 20:39
поделиться

Вы можете использовать свойства dataTables columnClasses и rowClasses.

Таким образом вы можете получить результат, который показан здесь

0
ответ дан 29 November 2019 в 20:39
поделиться

Я сделал гибридное решение с Javascript.

<rich:column styleClass="expired" rendered="#{documento.expired}">
<f:facet name="header">
Da evadere entro
</f:facet>                  
<h:outputText value="#{documento.timeAgoInWords}" />
</rich:column>

, а затем в Javascript (с Prototype, который включен в Richfaces)

<script type="text/javascript">   
  function colorize() {    
    $$('td.expired').each(function(el) {
      el.up().addClassName('expired');      
    });
  }

  Event.observe(window, 'load', function() {
    colorize();
  });
</script>

править:

это добавить условный класс css with rendered:

<rich:column styleClass="expired" rendered="#{documento.expired}">

с javascript I цикл на каждом td с истекшим сроком действия класса css $$ ('td.expired') и добавление того же класса css к верхнему узлу tr с el.up () .

Event.observe(window, 'load', function() {});

это просто запускает функцию, когда DOM полностью загружен.

0
ответ дан 29 November 2019 в 20:39
поделиться

Специально для каждого столбца:

<rich:column styleClass="#{someBean.isSomething ? 'styleIfTrue' : 'styleIfFalse' }">
30
ответ дан 29 November 2019 в 20:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: