Facelet では、<pe:remoteCommand>
backingbean の値を更新するために使用しようとしています。
<pe:remoteCommand name="saveMapArea" process="@this" actionListener="#{defineMapArea.createMapArea}">
<pe:assignableParam name="areaString" assignTo="#{defineMapArea.tagMapArea.mapArea}"/>
<pe:assignableParam name="areaName" assignTo="#{defineMapArea.tagMapArea.name}" />
<pe:assignableParam name="castId" assingTo="#{defineMapArea.tagMapArea.castId}" />
</pe:remoteCommand>
castId
ユーザーが送信ボタンをクリックすると、値が jQuery によってドロップダウン リストから取得されます。ドロップダウン リストのコードは次のとおりです。
<h:selectOneMenu id="area_assign_device">
<f:selectItem itemLabel="Select Icast" itemValue="" />
<f:selectItems value="#{defineMapArea.castList}" var="cast" itemLabel="#{cast.name}" itemValue="#{cast.castId}"/>
</h:selectOneMenu>
送信ボタンのコードは次のとおりです。
<p:commandButton value="Submit" type="button" onclick="CreateArea.saveArea()"/>
リモートコマンド「saveMapArea」を呼び出すコードは次のとおりです。
saveArea : function() {
if(CreateArea.validate()) {
// ...some other code to init map area...
var name=jQuery('#area_name_text').val();
var castId=jQuery('#area_assign_device').val();
saveMapArea(mapArea, name, castId);
CreateArea.points = [];
}
}
私のバッキングビーンは次のとおりです。
@ManagedBean
@RequestScoped
public class DefineMapArea extends BaseJsfBean {
private static final long serialVersionUID = 1L;
private static Log log = LogFactory.getLog(DefineMapArea.class);
private TagMapArea tagMapArea;
private List<TagMapArea> areaList;
private String areaListJson;
@ManagedProperty(value="#{tagCustomService}")
private ITagCustomService tagCustomService;
@Override
protected void init() throws Exception {
// ..some initializations...
}
public void createMapArea() {
log.info("Area Persisting : " + tagMapArea.getMapArea());
tagMapArea.setTagMapImageId(2);
tagMapArea.setMapAreaType("test");
tagMapArea.setDescription("test");
}
// ....all the getters and setters....
}
TagMapArea
はJPAエンティティで、castId
フィールドを含む部分は次のとおりです。
@Column(name = "cast_id", nullable = false)
protected Integer castId;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="cast_id", nullable=false, insertable=false, updatable=false)
protected TagCast cast;
問題は、送信ボタンをクリックすると、次のNullPointerException
ようにスローされることです。
java.lang.NullPointerException
at org.primefaces.extensions.component.remotecommand.RemoteCommandRenderer.decode(RemoteCommandRenderer.java:82)
at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1377)
at org.apache.myfaces.context.servlet.PartialViewContextImpl$PhaseAwareVisitCallback.visit(PartialViewContextImpl.java:731)
at org.apache.myfaces.component.visit.PartialVisitContext.invokeVisitCallback(PartialVisitContext.java:214)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:932)
castId
これは、リモート コマンドのフィールドが原因であると確信しています。そのフィールドを削除すると、問題なく動作するからです。ドロップダウン リストから取得した選択した値がリモート コマンドに送信されない理由がわかりません。誰も問題がどこにあるのか知っていますか?