我在JSF2.0中有一个简单的应用程序。我在Session范围内创建了一个ManagedBean。在这个托管bean中我存储了一个属性。但是当我尝试从jsp访问该属性时,它没有被检索到。我存储了roleType的值。 这是ManagedBean中的方法
public class LoginBean {
private String userID;
private List<String> roleNames;
private String roleType;
public String getUserID() {
return userID;
}
public void setUserID(String userID) {
this.userID = userID;
}
public List<String> getRoleNames() {
return roleNames;
}
public void setRoleNames(List<String> roleNames) {
this.roleNames = roleNames;
}
public String getRoleType() {
return roleType;
}
public void setRoleType(String roleType) {
this.roleType = roleType;
}
public String createAuth() throws SQLException
{
Authorisation authCall=com.validation.client.authorization.concern.AuthorisationCall.createAuthorisation(userID);
if(authCall.getUserRoles()==null || authCall.getUserRoles().size()<=0){
return "login";
}
List<String> roleNameList=new ArrayList<String>();
Iterator itr =authCall.getUserRoles().iterator();
String roleType=null;
while (itr.hasNext()){
UserRole userRole=(UserRole)itr.next();
roleNameList.add(userRole.getRoleName());
roleType=userRole.getRoleDescription();
}
setRoleNames(roleNameList);
setRoleType(roleType);
}
}
The jsp page where I am retrieving the property is :
<c:if test="${loginBean.roleType=='APPROVER'}">
<h:outputText value="loginBean.roleType"/>
<c:if>
在faces-config.xml中我这样做是为了注册bean
<managed-bean>
<description>temporary authentication</description>
<managed-bean-name>loginBean</managed-bean-name>
<managed-bean-class>com.validation.client.authorization.concern.LoginBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
这是我在JSF的第一次尝试,我真的很难接受。
答案 0 :(得分:0)
与评论一样,请确保roleType
未归还null
,<c:if>
正在评估false
(或者您未获得APPROVER
但也要改变
<h:outputText value="loginBean.roleType"/>
到EL表达式
<h:outputText value="#{loginBean.roleType}"/>
否则您将无法获得预期的输出。考虑完全放弃JSTL并使用rendered
属性作为条件输出(不要混用JSTL和JSF,否则你可能会遇到一些奇怪的问题)
<h:outputText value="#{loginBean.roleType}" rendered="#{loginBean.roleType != 'APPROVER'}"/>
更好的是,尽量不要使用硬编码String
并在对象中创建单独的函数,例如
private boolean approver;
public boolean isApprover() {
return approver; //Evaluate this condition wherever you think is appropriate
}
//Setter omitted
并像这样修改<h:output>
<h:outputText value="#{loginBean.roleType}" rendered = #{loginBean.approver}/>