在众多的基金产品当中Q怎样q用较低成本购买到好的基金品,是一门值得投资者掌握和了解的功课。笔者认为,买基金要巧算以下六本l济账?br /> W一Q证券市场处于阶D|运行高ҎQ暂不购买股型基金。由于股型基金的主要配|?span id="AD3">资是股。当证券市场处于阶段性高ҎQ基金的持仓股票有可能位于相寚w点,此时盲目介入Q将使申购基金的成本增大? W二Q央行货币政{调整时Q投资者应多观察政{动向,谨慎参与购买货币市场基金。货币市场基金的主要资配置品种是货币市场投资品,受利率政{的影响较大。因此,不考虑央行货币政策Q盲目购买货币市场基金品也是不l济的?br /> W三Q购买经q分U的基金产品。由于基金的收益存在于基金的净值当中。当基金l过分红Q其净D然下降,逐渐回落到基金的面值附q,qؓ投资者购买具有高成长性的基金产品Q创造了良好投资时机? W四Q保本型基金产品一定要遵守遉K期的规定。保本型基金产品的一个重要投资特Ҏ保证投资者的本金不受损失。要惛_现这一目标Q就要遵守避险期的规定。提前赎回基金,因不能得到甌、赎回费用的减免Q而投资者投资成本增大? W五Q净值L动较的基金产品Q不宜进行“频买频卖”。基金作ZU专家理财品,主要是从基金的长期投资中受益。如果投资者对手持基金q行频繁操作Q很难从基金配置资的周期性上获利? W六Qn受费率优惠是最l济的选择。ؓ了促q基金的营销Q基金管理h和渠道商都会在基金费率结构上大做文章。通过各种形式的费率设计模式,辑ֈ吸引投资者的目的。这也ؓ投资者运用较低的购买资金获取较多的基金䆾额创造了条g。(阮文华) |
Q题讎ͼ与友天提及JSF的概念,转蝲一文章供日后参?/p>
Struts和JSF/Tapestry都属于表现层框架Q这两种分属不同性质的框Ӟ后者是一U事仉动型的组件模型,而Struts只是单纯的MVC模式框架Q老外L急吼D事g驱动型就比MVC模式框架好,何以见得Q我们下面进行详l分析比较一下到底是怎么回事Q?/p>
首先事g是指从客L面Q浏览器Q由用户操作触发的事ӞStruts使用Action来接受浏览器表单提交的事Ӟq里使用了Command模式Q每个承Action的子c都必须实现一个方法execute?/p>
在struts中,实际是一个表单Form对应一个Actionc?或DispatchAction)Q换一句话_在Struts中实际是一个表单只能对应一个事Ӟstrutsq种事g方式UCؓapplication eventQapplication event和component event相比是一U粗_度的事件?/p>
struts重要的表单对象ActionForm是一U对象,它代表了一U应用,q个对象中至包含几个字D,q些字段是Jsp面表单中的input字段Q因Z个表单对应一个事Ӟ所以,当我们需要将事g_度l化到表单中q些字段Ӟ也就是说Q一个字D对应一个事件时Q单U用Struts׃太可能,当然通过l合JavaScript也是可以转弯实现的?/p>
而这U情况用JSF可以方便实玎ͼ
<h:inputText id="userId" value="#{login.userId}"> <f:valueChangeListener type="logindemo.UserLoginChanged" /> </h:inputText> |
#{login.userId}表示从名为login的JavaBean的getUserId获得的结果,q个功能使用struts也可以实玎ͼname="login" property="userId"
关键是第二行Q这里表C如果userId的值改变ƈ且确定提交后Q将触发调用cUserLoginChanged的processValueChanged(...)Ҏ?/p>
JSF可以为组件提供两U事ӞValue Changed?Action. 前者我们已l在上节见识q用处,后者就相当于struts中表单提交Action机制Q它的JSF写法如下Q?/p>
<h:commandButton id="login" commandName="login"> <f:actionListener type=”logindemo.LoginActionListener?/> </h:commandButton> |
从代码可以看出,q两U事件是通过Listernerq样观察者模式脓在具体组件字D上的,而Struts此类事g是原始的一U表单提交Submit触发机制。如果说前者比较语a化(~程语言习惯做法cMSwing~程Q;后者是属于WEB化,因ؓ它是来自Html表单Q如果你h是从Perl/PHP开始,反而容易接受Strutsq种风格?/p>
基本配置
Struts和JSF都是一U框ӞJSF必须需要两U包JSF核心包、JSTL包(标签库)Q此外,JSFq将使用到Apache目的一些commons包,q些Apache包只要部|在你的服务器中既可?/p>
JSF包下载地址Q?a target="_blank">http://java.sun.com/j2ee/javaserverfaces/download.html选择其中Reference Implementation?/b>
JSTL包下载在http://jakarta.apache.org/site/downloads/downloads_taglibs-standard.cgi
所以,从JSF的驱动包l成看,其开源基因也占据很大的比重,JSF是一个SUN伙伴们工业标准和开源之间的一个血ѝ?/p>
上述两个地址下蝲的jar合ƈ在一起就是JSF所需要的全部驱动包了。与Struts的驱动包一Pq些驱动包必M于Web目的WEB-INF/libQ和Struts一L是也必须在web.xml中有如下配置Q?/p>
<web-app> <servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> |
q里和Struts的web.xml配置何其怼Q简直一模一栗?/p>
正如Struts的struts-config.xml一PJSF也有cM的faces-config.xml配置文gQ?/p>
<faces-config> <navigation-rule> <from-view-id>/index.jsp</from-view-id> <navigation-case> <from-outcome>login</from-outcome> <to-view-id>/welcome.jsp</to-view-id> </navigation-case> </navigation-rule> <managed-bean>
|
在Struts-config.xml中有ActionForm Action以及Jsp之间的流E关p,在faces-config.xml中,也有q样的流E,我们具体解释一下NavigationQ?/p>
在index.jsp中有一个事Ӟ
<h:commandButton label="Login" action="login" />
action的值必d配form-outcome|上述Navigation配置表示Q如果在index.jsp中有一个login事gQ那么事件触发后下一个页面将是welcome.jsp
JSF有一个独立的事g发生和页面导航的程安排Q这个思\比struts要非常清晰?/p>
managed-beancMStruts的ActionFormQ正如可以在struts-config.xml中定义ActionForm的scope一Pq里也定义了managed-bean的scope为session?/p>
但是如果你只以ؓJSF的managed-beanp点功能就错了QJSF融入了新的Ioc模式/依赖性注等技术?/p>
Ioc模式
对于Userbeanq样一个managed-beanQ其代码如下Q?/p>
public class UserBean {
private String name;
private String password;
// PROPERTY: name
public String getName() { return name; }
public void setName(String newValue) { name = newValue; }
// PROPERTY: password
public String getPassword() { return password; }
public void setPassword(String newValue) { password = newValue; }
}
<managed-bean> |
faces-config.xmlq段配置其实是将"me"赋值给nameQ将secret赋值给passwordQ这是采?a target="_blank">Ioc模式中的Setter注射方式?/p>
Backing Beans
对于一个web formQ我们可以用一个bean包含其涉及的所有组Ӟq个beanq为Backing BeanQ?Backing Bean的优ҎQ一个单个类可以装相关一pd功能的数据和逻辑?/p>
说白了,是一个Javabean里包含其他JavabeanQ互相调用,属于Facade模式或Adapter模式?/p>
对于一个Backing Beans来说Q其中包含了几个managed-beanQmanaged-bean一定是有scope的,那么q其中的几个managed-beans如何配置它们的scope呢?
<managed-bean> ... <managed-property> <property-name>visit</property-name> <value>#{sessionScope.visit}</value> </managed-property> |
q里配置了一个Backing Beans中有一个setVisitҎQ将q个visit赋gؓsession中的visitQ这样以后在E序中我们只访问visit对象Q从中获取我们希望的数据Q如用户登陆注册信息Q,而visit是保存在sessionq是application或request只需要配|既可?/p>
UI界面
JSF和Struts一P除了JavaBeanscM外,q有面表现元素Q都是是使用标签完成的,Struts也提供了struts-faces.tld标签库向JSFq渡?/p>
使用Struts标签库编E复杂页面时Q一个最大问题是会大量用logic标签Q这个logic如同if语句Q一旦写hQ搞的JSP面象俄|斯方块一P但是使用JSF标签qz优:
<jia:navigatorItem name="inbox" label="InBox" |
如果authenticationBean中inboxAuthorizedq回是假Q那么这一行标{ְ不用昄Q多q净利烦Q?/p>
先写到这里,我会l箋对JSF深入比较下去Q如果研I过Jdon框架的hQ可能会发现QJdon框架的jdonframework.xml中service配置和managed-bean一样都使用了依赖注,看来对Javabean的依赖注已l迅速地成ؓ一U新技术象征,如果你还不了解Ioc模式Q赶紧补课?/p>