Мой URL имеет имя параметра = SSA-COLUMB.Параметр seam (установленный в DevicesList.page.xml) равен
<param name="name" value="#{searchDeviceName.paramValue}"/>
Когда я загружаю страницу, создается экземпляр компонента searchDeviceName и устанавливается paramValue.Я проверил это с помощью инструкции print для setParamValue ().Вот код для SearchDeviceName.java
@Name("searchDeviceName")
@Scope(ScopeType.CONVERSATION)
public class SearchDeviceName {
public String paramValue;
public Table table;
public String sqlString;
public ArrayList<JoinClause> joinList;
public SearchDeviceName() {
Table devTable = new Table("devices","d","dev_id");
setTable(devTable);
setSqlString(" d.name like '%"+paramValue+"%'");
}
<getters and setters>
}
У меня есть сеансный компонент без сохранения состояния, который захватывает экземпляр этого компонента для использования при построении оператора SQL.Но когда я беру экземпляр компонента, для него не устанавливается paramValue.По-видимому, это новый экземпляр компонента.
SearchDeviceName searchObj = (SearchDeviceName) Component.getInstance("searchDeviceName", ScopeType.CONVERSATION);
Это не тот экземпляр searchDeviceName, который был создан при установке значения параметра.Я знаю это, потому что paramValue имеет значение null, а не "SSA-COLUMB".
Есть ли способ использовать в моем сессионном компоненте тот же компонентный intance, который был создан при установке значения параметра?Как мне получить это?
Вот код, который захватывает компонент
@Name("idListBuilder")
public class IdListBuilder {
@In
private Context conversationContext;
@In(create = true)
EntityManager entityManager;
private String sqlQuery;
private Table headTable;
private ArrayList<String> restrictionValues = new ArrayList<String>();
private ArrayList<Table> restrictionJoinTables = new ArrayList<Table>();
public IdListBuilder(Table table) {
this.headTable = table;
this.sqlQuery = "SELECT " + table.alias + "." + table.primaryKey + " FROM " +
table.name + " " + table.alias;
searchObjects.add("searchDeviceName");
searchObjects.add("searchOfficeState");
}
public List<Integer> getIdList(){
evaluateSearchObjects();
createQuery();
/*
Code for grabbing resultlist of query goes here.
return resultList;
*/
return null;
}
public void evaluateSearchObjects() {
SearchDeviceName searchObj = (SearchDeviceName) Component.getInstance("searchDeviceName", ScopeType.CONVERSATION);
if ( searchObj != null ) {
restrictionValues.add(searchObj.sqlString);
restrictionJoinTables.add(searchObj.table);
}
}
void createQuery(){
StringBuilder strBuilder = new StringBuilder(sqlQuery);
strBuilder.append(" where ");
for ( String str : restrictionValues ){
strBuilder.append(str);
}
System.out.println("done");
}
}