技术开发 频道

编写 JSF 自定义复合组件的技巧和窍门

  实现内部动作监听器

  在 Value Scroller 中,点击增值或减值按钮,输入框内的值会随之增大或者减小。我们可以简单地在组件类 ValueScroller 中实现一个内部动作监听器,重用 UICommand 的事件处理逻辑。

  清单 6. 实现 Value Scroller 动作监听器  

/**
* Internal action listener for Value Scroller
* _cnnew1@author cll
*
*/
private class ScrollerActionListener implements ActionListener {
    
public void processAction(ActionEvent e) {
        
// Only Integer is supported for this demo
        
if (input.getValue() instanceof Integer) {
            
String commandId = ((UICommand)e.getSource()).getId();
            
int value = ((Integer)input.getValue()).intValue();
            
// Increase value if the up link is clicked
            
if (commandId.equals(UPLINK_ID)) {
                
if (value + getStep() > max) {
                    input.setValue(
new Integer(max));
                }
else {
                    input.setValue(
new Integer(value + getStep()));
                }
            }
            
// Decrease value if the down link is clicked
            
else if (commandId.equals(DOWNLINK_ID)) {
                
if (value - getStep() < min) {
                    input.setValue(
new Integer(min));
                }
else {
                    input.setValue(
new Integer(value - getStep()));
                }
            }
        }
else {
            throw
new IllegalArgumentException(
          
"Unsupported binding type, " +
          
"and only Integer instance allowed for this demo.");
        }
    }
}

  最后,在调用 addChildrenAndFaces 方法创建添加子组件的时候,将这个自定义动作监听器添加到增值和减值组件中去。

  清单 7. 注册 Value Scroller 动作监听器  

ScrollerActionListener listener = new ScrollerActionListener();

  upLink.addActionListener(listener);

  downLink.addActionListener(listener);
0
相关文章