我的XPage上有一个扩展库对话框控件,它通过一个按钮打开:
XSP.openDialog("#{id:commentsDialog}");
在我的XPage上,我有一个名为document1的文档源。当我将这些字段(从Data Palette中拖放)放在对话框控件上时,字段(docID)存在,但不可编辑 - 看起来为显示计算:
<xe:dialog id="commentsDialog" title="Comments" styleClass="dialogBoxComments">
<xp:panel>
<xp:table style="width:100%">
<xp:tr>
<xp:td>
<xp:label value="Enter your comments..." id="label2"></xp:label>
</xp:td>
</xp:tr>
<xp:tr>
<xp:td>
<xp:inputTextarea id="comments" style="width:100%;height:100px">
</xp:inputTextarea>
</xp:td>
</xp:tr>
<xp:tr>
<xp:td>
<xp:div style="text-align:right">
<xp:button value="Submit" id="submitButton">
<xp:eventHandler event="onclick" submit="true"
refreshMode="complete">
<xp:this.action><![CDATA[#{javascript:saveComments();}]]></xp:this.action>
</xp:eventHandler>
</xp:button>
<xp:button id="cancelButton" value="Cancel">
<xp:eventHandler event="onclick" submit="false">
<xp:this.script><![CDATA[XSP.closeDialog("#{id:commentsDialog}");]]></xp:this.script>
</xp:eventHandler>
</xp:button>
</xp:div>
</xp:td>
</xp:tr>
<xp:tr>
<xp:td>
<xp:inputText value="#{document1.docID}" rendered="false"
id="docID"></xp:inputText>
</xp:td>
</xp:tr>
</xp:table>
</xp:panel>
<xp:br></xp:br>
</xe:dialog>
我有一个输入文本区域,用户将在其中输入值,但我无法使用SSJS获取该值。我试过了:
function getComponentValue(id){
var field = getComponent(id);
var value = field.getSubmittedValue();
if( null == value ){
// else not yet submitted
value = field.getValue();
}
return value
}
要获取输入文本区域中的值,我不知道该怎么做,因为如果我绑定到Data Palette中的现有字段,它看起来是不可编辑的,我不能输入任何值。
另外,我在对话框控件上有一个Submit按钮,它调用了一些SSJS:
function saveComments() {
// Need to create a comments doc for the movie...
var db:NotesDatabase = session.getCurrentDatabase();
var doc:NotesDocument = currentDocument.getDocument();
var unid = getComponentValue("docID");
// Grab comments from dialog...
var comments = getComponentValue("comments");
// Create the comments doc...
var docComm:NotesDocument = db.createDocument();
docComm.replaceItemValue("Form", "comment");
var nowValue = @Text(@Now());
var currentUser = sessionScope.get("currentUser");
docComm.replaceItemValue("cm_Key", unid);
docComm.replaceItemValue("cm_By", currentUser);
docComm.replaceItemValue("cm_Date", nowValue);
docComm.replaceItemValue("cm_Key", unid);
docComm.save();
}
如何从服务器端关闭Dialog?
所以,3件事(感谢你的耐心):
谢谢!
编辑: 我在此评论中进行了编辑,因此我可以正确显示图像...
这是图像 - 绿色框是注释字段(来自commentsDocument源的cm_Comm)应存在的位置,红色框是不可编辑的docID字段:
以下是控件背后的代码:
<xe:dialog id="commentsDialog" title="Comments" styleClass="dialogBoxComments">
<xp:panel>
<xp:table style="width:100%">
<xp:tr>
<xp:td>
<xp:label value="Enter your comments..." id="label2"></xp:label>
</xp:td>
</xp:tr>
<xp:tr>
<xp:td>
<xp:inputTextarea id="comments" style="width:100%;height:100px"
value="#{commentDocument.cm_Comm}">
</xp:inputTextarea>
</xp:td>
</xp:tr>
<xp:tr>
<xp:td>
<xp:div style="text-align:right">
<xp:button value="Submit" id="submitButton">
<xp:eventHandler event="onclick" submit="true"
refreshMode="complete">
<xp:this.action><![CDATA[#{javascript:saveComments();getComponent("commentsDialog").hide();}]]></xp:this.action>
</xp:eventHandler>
</xp:button>
<xp:button id="cancelButton" value="Cancel">
<xp:eventHandler event="onclick" submit="false">
<xp:this.script><![CDATA[XSP.closeDialog("#{id:commentsDialog}");]]></xp:this.script>
</xp:eventHandler>
</xp:button>
</xp:div>
</xp:td>
</xp:tr>
<xp:tr>
<xp:td>
<xp:inputText value="#{document1.docID}" id="docID"></xp:inputText>
</xp:td>
</xp:tr>
</xp:table>
</xp:panel>
<xp:br></xp:br>
</xe:dialog>
请让我知道我在做什么 - 感谢这一点!
答案 0 :(得分:4)
如何在对话框控件上编辑字段
为inputTextarea添加一个value属性 - 例如一个viewScope变量(value="#{viewScope.myTextArea}"
),以便XPages(JSF)可以在以后要处理的文本区域中存储内容
您的inputText字段设置为rendered="false"
。首先设置要渲染的控件(因此删除rendered =“false”属性)。
如何从输入文本区域获取未绑定到document1上字段的值
见上面的答案1.
如何从服务器端关闭对话框
使用getComponent("commentsDialog").hide()
。
答案 1 :(得分:1)
使用var“comment”创建第二个DominoDocument数据源。将其范围设置为“请求”。为cm_Key,cm_By和cm_Date创建隐藏的输入组件,为每个组件设置适当的defaultValue; e.g:
<xp:inputHidden value="#{comment.cm_By}" defaultValue="#{context.user.distinguishedName}" />
然后您可以将对话框字段绑定到该数据源:
<xp:inputTextarea id="comments" style="width:100%;height:100px" value="#{comment.cm_Comment"}>
因此,您的提交按钮可以成为“保存文档”简单操作和单行“执行脚本”:
<xp:eventHandler event="onclick" submit="true" refreshMode="complete">
<xp:this.action>
<xp:actionGroup>
<xp:actionGroup>
<xp:saveDocument var="comment" />
<xp:executeScript>
<xp:this.script><![CDATA[#{javascript:getComponent("commentsDialog").hide();}]]></xp:this.script>
</xp:executeScript>
</xp:actionGroup>
</xp:actionGroup>
</xp:this.action>
</xp:eventHandler>
如果注释数据源的范围限定为每个请求,则每次都会创建一个新文档。您不需要以编程方式创建文档...让数据源为您管理。